package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class BOJ2866 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] line = br.readLine().split(" ");
int[] num = Arrays.stream(line).mapToInt(Integer::parseInt).toArray();
// 입력 행
int r = num[0];
// 입력 열
int c = num[1];
//answer를 출력하는 탈출 조건
boolean breakFlag = false;
// 입력 조건 str
String[] str = new String[r];
// 열의 문자열을 담을 String 배열
String[] cols = new String[c];
// 해쉬 셋
Set<String> set;
// 답
int answer = 0;
// 문자열 행수 만큼 입력받고 str배열에 할당
for (int i = 0; i < r; i++) {
str[i] = br.readLine();
}
// 열 돌면서 temp에 해당 열의 문자 담아주고, cols[]배열에 차곡차곡 쌓아주기
for (int i = 0; i < c; i++) {
String temp = "";
for (int j = 1; j < r; j++) {
temp += str[j].charAt(i);
}
cols[i] = temp;
}
// 행을 돌때마다 한 글자씩 문자를 빼주어야 하므로, 행 돌기
// 자바의 경우 중첩 반복문을 빠져나오고 싶은 경우
// for문 위에 각 라벨을 붙이고 해당 break '해당 라벨명'을 걸어 빠져나올 수 있다고함 .
Loop1:
for (int i = 0; i < r; i++) {
// 행을 새로 돌 때마다 set에 새로운 HashSet<> 재할당
set = new HashSet<>();
for (int j = 0; j < cols.length; j++) {
// col의 갯수만큼 돌면서 행 인덱스 문자 지워서 word에 할당
String word = cols[j].substring(i);
if (set.contains(word)) {
breakFlag = true;
break Loop1;
} else
set.add(word);
}
answer++;
}
System.out.println(answer);
}
}
728x90
반응형