728x90
https://www.acmicpc.net/problem/19637
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 칭호의 갯수 3
int m = Integer.parseInt(st.nextToken()); // 출력해야 하는 캐릭터들의 개수 8
StringBuilder sb = new StringBuilder();
String[] name = new String[n];
int[] power = new int[n];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
name[i] = st.nextToken();
power[i] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < m; i++) {
int num = Integer.parseInt(br.readLine());
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (power[mid] < num) {
left = mid + 1;
} else {
right = mid - 1;
}
}
sb.append(name[left]); // 혹은 name[right+1] 어짜피 돌면 left가 right 하나 앞에가서 종료되어있음.
sb.append("\n");
}
System.out.print(sb);
}
}
회고
- 시간 초과가 엄청 빡빡했다.
- stringbuilder를 사용하지 않으면 안 될 정도였다.
- 이분탐색 문제를 많이 푼 적이 없어서 생각보다 오래 걸리고 어려웠다.
'Algorithm Study > BaekJoon (JAVA)' 카테고리의 다른 글
백준 2467_용액_JAVA (1) | 2024.06.02 |
---|---|
백준 1715_카드 정렬하기_JAVA (0) | 2024.05.19 |
백준 2470_두 용액_JAVA (0) | 2024.05.19 |
백준 16234_인구 이동_JAVA (0) | 2024.05.05 |
백준 1918_후위 표기식_JAVA (0) | 2024.04.29 |