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();
}
}
'[ 다먹살 ] > - Coding' 카테고리의 다른 글
[프로그래머스] 레벨1 추억점수 (2) | 2023.04.13 |
---|---|
[구름] 레벨2 1등과 2등 (1) | 2023.04.13 |
[구름] 레벨1 뱀이 지나간 자리 (2) | 2023.04.07 |
[프로그래머스] 레벨0 이진수 더하기 (2) | 2023.03.20 |
[백준] 22233 가희와 키워드 (2) | 2023.03.14 |
댓글