문제 링크 : https://www.acmicpc.net/problem/2866
이 문제는 Set을 이용하여 구현할 수 있습니다.
문제를 잘 확인해보면 중복되는 경우 반복을 종료합니다. 따라서 Set에서 해당 문자열을 체크한 후 이미 존재한다면 반복을 종료하는 방식으로 탐색합니다.
여기서 중요한 점은 문자열을 입력받을 때 세로 방향으로 읽기 때문에 입력의 인덱스를 반대로 입력받는 것입니다. 그 후 현재 세로줄 위치만큼 문자열을 substring하여 문자열을 잘라낸 후 중복 체크를 진행합니다.
다음은 코드입니다.
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
String[] arr = new String[M];
for(int i=0;i<N;i++){
String s = br.readLine();
for(int j=0;j<M;j++){
if(i==0) arr[j] = String.valueOf(s.charAt(j));
else arr[j] += String.valueOf(s.charAt(j));
}
}
if(N == 2){
System.out.println(0);
return;
}
for(int i=1;i<N-1;i++){
Set<String> set = new HashSet<>();
for(int j=0;j<M;j++){
String key = arr[j].substring(i);
if(set.contains(key)){
System.out.println(i-1);
return;
}
else set.add(key);
}
}
System.out.println(N-1);
}
}