

풀이 방법
이분 탐색을 이용해서 풀이했다.
mid값은 지운 열의 갯수라서 중복일 경우 right를 mid-1로 해줘서 더 위를 확인해주고 중복이 아니라면 지워질 수 있기 때문에 count값을 mid로 주고 left를 mid+1로 해줘서 더 지울 수 있는지 확인해주었다.
내 코드
package com.company;
import java.io.*;
import java.util.*;
public class Main {
static int R, C;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
HashSet<String> set = new HashSet<>();
R = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < R; i++) {
list.add(br.readLine());
}
int left = 0;
int right = R - 1;
int count = 0;
while (left <= right) {
int mid = (left + right) / 2;
set.clear();
for (int i = 1; i <= C; i++) {
String s = "";
for (int j = mid; j < R; j++) {
s += list.get(j).charAt(i - 1);
}
set.add(s);
if (set.size() != i) {
break;
}
}
if (set.size() != C) {
right = mid - 1;
} else {
left = mid + 1;
count = mid;
}
}
System.out.println(count);
}
}
'코딩테스트 > [백준] 코딩테스트 연습' 카테고리의 다른 글
수고르기 - 2230번 (0) | 2021.11.16 |
---|---|
숫자고르기 - 2668번 (0) | 2021.11.11 |
줄어들지 않아 - 2688번 (0) | 2021.11.09 |
팀 배정 - 18768번 (0) | 2021.11.08 |
거짓말 - 1043번 (0) | 2021.11.08 |