19638번: 센티와 마법의 뿅망치 (acmicpc.net)
19638번: 센티와 마법의 뿅망치
마법의 뿅망치를 센티의 전략대로 이용하여 거인의 나라의 모든 거인이 센티보다 키가 작도록 할 수 있는 경우, 첫 번째 줄에 YES를 출력하고, 두 번째 줄에 마법의 뿅망치를 최소로 사용한 횟수
www.acmicpc.net
package Heap;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Baekjoon_19638_센티와마법의뿅망치 {
static class Node implements Comparable<Node>{
int x;
public Node(int x) {
this.x = x;
}
@Override
public int compareTo(Node o) {
return o.x - this.x; // 내림차순 정렬
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken()); // 인구 수
int H = Integer.parseInt(st.nextToken()); // 센티의 키
int T = Integer.parseInt(st.nextToken()); // 뿅망치 회수
PriorityQueue<Node> pq = new PriorityQueue<>();
for(int i = 0 ; i <N; i++) {
int a = Integer.parseInt(br.readLine());
pq.offer(new Node(a));
}
// 뿅망치를 사용할 수 있는 횟수만큼 for문을 돌린다.
int cnt = 0;
for(int i = 0; i < T; i++) {
// pq에서 가장 큰게 H보다 작으면 더이상 볼 필요가 없다.
if(pq.peek().x < H) break; // 이 부분을 깜빡해서 계속 틀렸었다.
if(pq.peek().x == 1) continue; // 1이면 나누는 과정 필요 없다.
Node node = pq.poll();
int height = node.x/2;
cnt++;
pq.offer(new Node(height));
}
for(int i = 0; i < pq.size(); i++) {
int height = pq.poll().x;
if(height >= H) {
System.out.println("NO");
System.out.println(height);
return;
}
else {
System.out.println("YES");
System.out.println(cnt);
return;
}
}
}
}
'알고리즘 > BAEKJOON' 카테고리의 다른 글
| 2417 정수 제곱근_Binary Search (0) | 2021.07.12 |
|---|---|
| 19598 최소 회의실 개수 (0) | 2021.07.11 |
| 11279 최대 힙_Heap (0) | 2021.07.08 |
| 14621 나만 안되는 연애_Prim (0) | 2021.07.06 |
| 1197 최소 스패닝 트리_Kruskal (0) | 2021.07.05 |