이번에 풀어본 문제는
백준 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를 출력하면 됩니다.
제목부터 귀여운 문제였습니다 ㅎㅎㅎ 재밌게 풀었어요! ^^^