문제 : www.acmicpc.net/problem/19637
19637번: IF문 좀 대신 써줘
첫 번째 줄에는 칭호의 개수 N (1 ≤ N ≤ 105)과 칭호를 출력해야 하는 캐릭터들의 개수 M (1 ≤ M ≤ 105)이 빈칸을 사이에 두고 주어진다. (1 ≤ N, M ≤ 105) 두 번째 줄부터 N개의 줄에 각 칭
www.acmicpc.net
문제 유형 : 이진탐색
풀이 방식
Step 1. 칭호의 이름과 해당 칭호의 전투력 상한값을 list에 넣는다
Step 2. 캐릭터의 전투력을 입력 받고 이진탐색을 한다.
Step 3. 이진탐색한 내용들을 StringBuilder에 append 하여 출력
소스 코드
package BOJ;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
public class BOJ_19637_IF문좀대신써줘_Main {
private static List<Type> list;
static class Type{
String Name;
int CombatPower;
public Type(String name, int combatPower) {
super();
Name = name;
CombatPower = combatPower;
}
}
public static void main(String[] args) throws IOException {
// 1. 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int N = Integer.parseInt(st.nextToken()); // 칭호의 개수 (1 ≤ N ≤ 105)
int M = Integer.parseInt(st.nextToken()); // 캐릭터들의 개수 (1 ≤ M ≤ 105)
list = new ArrayList<Type>();
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine()," ");
String Name = st.nextToken();
int CombatPower = Integer.parseInt(st.nextToken());
list.add(new Type(Name, CombatPower));
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < M; i++) {
int score = Integer.parseInt(br.readLine());
// 2-1. 이진 탐색
String str = BinarySearch(score);
sb.append(str).append("\n");
}
// 3. 정답 출력
System.out.println(sb.toString());
}
private static String BinarySearch(int score) {
int start = 0, end = list.size()-1, mid=0;
while(start<=end) {
mid = (start+end) / 2;
if(score > list.get(mid).CombatPower) start = mid+1;
else end = mid - 1;
}
return list.get(end+1).Name;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA]백준_10597_순열장난 (0) | 2021.01.18 |
---|---|
[JAVA]백준_6087_레이저통신 (0) | 2020.09.23 |
[JAVA]백준_2643_색종이올려놓기 (0) | 2020.09.01 |
[JAVA]백준_15566_개구리1 (0) | 2020.09.01 |
[JAVA]백준_19563_개구리1 (0) | 2020.08.26 |