백준 19638 센티와 마법의 뿅망치 (Java,자바)

jonghyukLee·2022년 6월 23일
0

이번에 풀어본 문제는
백준 19638번 센티와 마법의 뿅망치 입니다.

📕 문제 링크

❗️코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    static int N,H,T;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        H = Integer.parseInt(st.nextToken());
        T = Integer.parseInt(st.nextToken());

        String answer = "NO";
        Queue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

        for (int i = 0; i < N; i++) {
            pq.add(Integer.parseInt(br.readLine()));
        }
        int cnt = 0;
        for (int i = 0; i < T; i++) {

            // 최장신이 나보다 작거나 1일경우 break;
            if ((pq.peek() < H) || (pq.peek() == 1)) break;
            cnt++;
            pq.add(pq.poll() / 2);
        }
        if (pq.peek() < H) answer = "YES";
        StringBuilder sb = new StringBuilder(answer);
        sb.append("\n").append(answer.equals("YES") ? cnt : pq.poll());
        System.out.print(sb);
    }
}

📝 풀이

자신보다 큰 거인이 있을 경우 최대 T번 뿅망치로 때려 크기를 반으로 줄일 수 있습니다. 이러한 조건에서, 제한된 횟수 내에 다른 거인들을 모두 자신보다 작게 만들 수있으면 YES, 아니라면 NO를 출력하는 문제입니다.
우선순위 큐에 거인들의 키를 담고, top값이 자신보다 작아질 때 까지 뿅망치 질을 반복합니다. 최대 횟수만큼 반복한 후 반복문 밖에서 top값을 체크하여 자신보다 작으면 YES, 이외는 NO를 출력하면 됩니다.

📜 후기

제목부터 귀여운 문제였습니다 ㅎㅎㅎ 재밌게 풀었어요! ^^^

profile
머무르지 않기!

0개의 댓글