📌 고정 게시글

📢 공지합니다

이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.

최코딩의 개발

[백준 19637번] IF문 좀 대신 써줘 본문

코딩테스트/백준

[백준 19637번] IF문 좀 대신 써줘

seung_ho_choi.s 2024. 12. 19. 20:57
728x90

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에 넣으면 끝!

728x90