Algorithm/Backjoon
[ 백준 19637 JAVA ] IF문 좀 대신 써줘 (Feat. 이분탐색)
youth787
2023. 10. 28. 16:19
https://www.acmicpc.net/problem/19637
19637번: IF문 좀 대신 써줘
첫 번째 줄에는 칭호의 개수 N (1 ≤ N ≤ 105)과 칭호를 출력해야 하는 캐릭터들의 개수 M (1 ≤ M ≤ 105)이 빈칸을 사이에 두고 주어진다. (1 ≤ N, M ≤ 105) 두 번째 줄부터 N개의 줄에 각 칭
www.acmicpc.net
Solve
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static class gametype{
String name;
int power;
public gametype(String name, int power) {
this.name = name;
this.power = power;
}
}
static List<gametype> list;
static int N, M;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String[] input = br.readLine().split(" ");
N = Integer.parseInt(input[0]);
M = Integer.parseInt(input[1]);
list = new ArrayList<gametype>();
for(int i=1; i<=N; i++){
input = br.readLine().split(" ");
list.add(new gametype(input[0],Integer.parseInt(input[1])));
} // 입력받기
for(int i =1; i<=M; i++) {
int score = Integer.parseInt(br.readLine());
sb.append(BinarySearch(score)).append("\n");
} // 해당 점수가 해당하는 이름 찾기
System.out.println(sb);
}
// 이분탐색 메서드
public static String BinarySearch(int score) {
int st = 0;
int ed = N-1;
while(st<=ed) {
int mid = (st+ed)/2;
if(score > list.get(mid).power) {
st = mid+1;
}else {
ed = mid-1;
}
}// while end
return list.get(ed+1).name;
}
}
반응형