작성자 : 고유진
문제 링크 : https://www.acmicpc.net/problem/1235


최대한 공통적으로 겹치는 부분이 있는 번호들을 비교하며 남는 뒷 자리 수만큼 다른 번호도 겹치는 경우 없이 만족할 수 있도록 k를 구해야 함
즉, 어떤 최소 k를 찾으면 모든 학번의 오른쪽 k자리가 서로 다른 문자열이 되는 지를 구해야 함
중복을 허용하지 않는 set 활용
N명의 학생 번호에서 맨 뒷자리 숫자부터 k개까지 잘라서 set에 넣어주고 이때의 set의 size()가 N과 같다면 다 중복이 없다는 뜻이므로 그게 답이 됨
이때 k번째 자리수까지 반복문이 돌 때마다 set 초기화해주어야 함
<예제>
1212345
1212356
0033445
k=1
1212345
1212356
0033445
stu = {"5", "6"} -> size() = 2 이므로 X
k=2
1212345
1212356
0033445
stu = {"45", "56"} -> size() = 2 이므로 X
k=3
1212345
1212356
0033445
stu = {"245","356", "445"} -> size() = 3 이므로 학생 수 N과 같고 끝의 세 자리가 겹치지 않고 구분 가능하므로 답
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine());
Set<String> stu = new HashSet<>();
String[] input = new String[N];
for(int i=0;i<N;i++) input[i] = in.readLine();
int len = input[0].length();
for(int k=1;k<=len;k++){
for(int i=0;i<N;i++){
stu.add(input[i].substring(len-k));
}
if(stu.size()==N){
System.out.println(k);
return;
}
stu.clear();
}
}
}