본문 바로가기
[ 다먹살 ]/- Coding

[구름] 레벨2 개명신청

by 엉망으로살기 2023. 4. 13.
반응형

https://level.goorm.io/exam/49069/%EC%B6%9C%EC%84%9D%EB%B6%80/quiz/1

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이

level.goorm.io

 

요즘 너무 귀찮아서 1일 1문제를 안하게 된다. 주말뺴고는 회사-집-운동(또는 사람만나기)-집을 반복하다보니까 단조로워지고 나도 축축 처지는 것 같은데 텀을 좀 두더라도 꾸준하게 풀어나가야겠다.

 

이 문제는 생각보다 예외케이스를 많이 고려해야되서 if-else문을 사용할 수 밖에 없었다. 일단 가장 먼저 전부 Set 같은 자료구조 형태에 넣어놓고 compareTo를 이용해서 정렬했는데 시간초과가 나서 단순 정렬과 반복문을 통해 해결하는 문제가 아니라는 것을 알게 되었다.

그 후 규칙성을 찾았는데, 사전순서이기 때문에 앞에서부터 비교할 때 현재 인덱스의 문자와 다음 인덱스의 문자를 비교했을 때 앞 문자가 크면 (알파벳 순서로 따졌을 때) 그 문자를 없애면 된다는 것이었다. 예외케이스는 문자열의 길이가 2일 때와 모든 문자가 같을 때, 모든 문자열이 정방향일 때였다.


문제 및 입출력


코드

import java.util.Scanner;

class Main
{
     public static void main(String[] args) throws Exception 
     {
         Scanner sc = new Scanner(System.in);
         String input = sc.nextLine();
         int index = -1;

         if(input.length()==2)
         {
              index = input.charAt(0) - input.charAt(1);

              if(index<0)
              {
                 System.out.println(input.charAt(0));
              }
              else
              {
                 System.out.println(input.charAt(1));
              }

              return;
         }

         for(int i=0; i<input.length()-1; i++)
         {
              if(input.charAt(i)>input.charAt(i+1))
              {
                  index = i;
                 break;
              }
              else if(input.charAt(i)==input.charAt(i+1))
             {
                 index = -2;
              }
         }

         if(index<0)
         {
              System.out.println(input.substring(0, input.length()-1));
              return;
         }

         System.out.println(input.substring(0, index) + input.substring(index+1, input.length()));
         sc.close();
     }
}

반응형

댓글