📢 공지합니다
이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.
https://www.acmicpc.net/problem/19637
package implement;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Implement19637 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
String[] title = new String[N];
int[] title_score = new int[N];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
title[i] = st.nextToken();
title_score[i] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < M; i++) {
int war = Integer.parseInt(br.readLine());
int start = 0;
int end = N - 1;
while (start <= end) {
int mid = (start + end) / 2;
if (title_score[mid] < war) {
start = mid + 1;
} else {
end = mid - 1;
}
}
sb.append(title[start]).append("\n");
}
System.out.println(sb.toString().trim());
}
}
저번 예산 문제에서 이분탐색에 호되게 당해서 이번에는 각성하고 풀었다. 이번 문제는 쏘쏘했다.
먼저, 캐릭터의 전투력들이 입력될 때마다 칭호들의 갯수의 평균값을 구해서 그 해당 번호의 값이 입력된 값보다 작을 경우 start 변수에 평균값(mid) + 1 를 해주고 만약 아닐 경우 end 변수에다가 할당하면 된다.
그 후 start의 값을 칭호 배열에 넣어 해당 칭호를 StringBuilder에 넣으면 끝!
[백준 20006번] 랭킹전 대기열 (1) | 2024.12.20 |
---|---|
[백준 22233번] 가희와 키워드 (0) | 2024.12.20 |
[백준 17484번] 진우의 달 여행 (Small) (1) | 2024.12.16 |
[백준 19941번] 햄버거 분배 (1) | 2024.12.14 |
[백준 2607번] 비슷한 단어 (0) | 2024.12.13 |