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.");
}
}
}
}
}