
-Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class BOJ14426 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int checkCnt = Integer.parseInt(st.nextToken());
int inputCnt = Integer.parseInt(st.nextToken());
String[] checkList = new String[checkCnt];
for (int i = 0; i < checkCnt; i++) {
checkList[i] = br.readLine();
}
// 정렬
Arrays.sort(checkList);
// 찾기
int answer = 0;
for (int i = 0; i < inputCnt; i++) {
String start = br.readLine();
if (isStartsWith(checkList, start)) {
answer++;
}
}
System.out.println(answer);
}
// 이분 탐색
private static boolean isStartsWith(String[] check, String start) {
int left = 0, right = check.length - 1;
while (left <= right) {
int middle = (left + right) / 2;
String curr = check[middle];
if (curr.startsWith(start)) {
return true;
} else {
// 해당 단어보다 작은 단어면 right 변경
if (curr.compareTo(start) > 0) {
right = middle - 1;
} else {
// 해당 단어보다 큰 단어면 left 변경
left = middle + 1;
}
}
}
return false;
}
}
첨에 완전 탐색으로 풀었다가 시간 초과 나서 이분 탐색 문제임을 알고 수정했으나 String의 CompareTo를 반대로 사용해 바꾸어 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 4366번 Average Speed (0) | 2026.02.08 |
|---|---|
| [백준/Java] 15815번 천재 수학자 성필 (0) | 2026.02.07 |
| [백준/Java] 9329번 패스트 푸드 상금 (0) | 2026.02.07 |
| [백준/Java] 14500번 테트로미노 (0) | 2026.02.07 |
| [백준/Java] 2660번 회장뽑기 (0) | 2026.02.06 |