본문 바로가기
Algorithm Study/BaekJoon (JAVA)

백준 19637_IF문 좀 대신 써줘_JAVA

by 창브로 2024. 5. 30.
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