백준 1972 놀라운 문자열(구현)

choiyongheon·2021년 8월 22일
1

15분만에 푼 문제(지금까지 푼 구현문제들 중 가장 빠르게 풀었던 것 같음..) D쌍까지의 범위가 문자열 길이 N-2까지라는 것을 유의하고, D쌍의 문자열들을 합친 뒤 LIST에 넣는다. contains를 통해 중복인지 확인한 뒤, 중복이라면 NOT surprising을 출력함.

문제 나누기
1. 종료 문자열이 들어왔을 때, 1글자일 때, 2글자 이상일 때
2. 2글자 이상이면서, D쌍이 중복일 때.

import java.util.*;

public class Main {
    public static void main (String[]args) {
        Scanner scanner = new Scanner(System.in);

        while (true){
            String s = scanner.next();
            if(s.equals("*"))   //종료조건
                break;
            else{
                if(s.length() == 1){        //1글자면 서프라이징
                    System.out.println(s + " " + "is surprising.");
                }
                else{       //2글자 이상일 때
                    int cnt = 0;    //n쌍을 나타내며, s.length - 2 까지 될 수 있다.
                    char[] c = s.toCharArray();
                    boolean flag = true;        //true면 서프, 아니면 false
                    for(; cnt<=s.length()-2; cnt++){
                        List<String> list = new ArrayList<>();
                        for(int i=0; i+cnt+1<s.length(); i++){
                            String res = String.valueOf(c[i]) + String.valueOf(c[i+cnt+1]);
                            if(!list.contains(res)){
                                list.add(res);
                            }
                            else {
                                flag = false;
                                break;
                            }
                        }
                        if(flag == false)
                            break;
                    }
                    if(flag)
                        System.out.println(s + " " + "is surprising.");
                    else
                        System.out.println(s + " " + "is NOT surprising.");
                }
            }
        }
    }
}

profile
주니어 백엔드 개발자

0개의 댓글

관련 채용 정보