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;
	}
}
반응형