
set의 특징을 이용해 문제를 풀이한다. set은 중복을 허락하지 않는다.
매 순회마다 set 자료구조를 만들고 문자열의 len - k부터 시작하는 부분문자열을 삽입한다. set 자료구조의 크기가 문자열 배열의 크기와 같다면 중복 저장이 없다는 뜻이고, 이는 생성된 부분문자열들이 전부 달라서 식별할 수 있다는 뜻이다.
import java.util.*;
public class BJ1235 {
static Scanner sc = new Scanner(System.in);
static String [] strings;
public static void main(String[] args) {
inputData();
System.out.println(findAnswer());
}
public static void inputData(){
int i;
strings = new String[sc.nextInt()];
for(i = 0; i < strings.length; i++){
strings[i] = sc.next();
}
}
public static int findAnswer() {
int len = strings[0].length();// 문자열의 길이
for (int k = 1; k <= len; k++) {
Set<String> set = new HashSet<>();// set을 매 반복마다 생성
for (String s : strings) {
set.add(s.substring(len - k));
}
System.out.print("문자열 길이 : " + (len - k) + " : ");
for(String temp : set){
System.out.print(temp + " ");
}
System.out.println();
if (set.size() == strings.length) {
//set의 크기 == 저장된 배열의 크기 : 중복된 문자열이 하나도 없음
System.out.print("종료 조건 만족 : ");
for(String temp : set){
System.out.print(temp + " ");
}
System.out.println();
return k;
}
}
return len;// 모든 문자가 필요한 경우
}
}