문제
[백준] 19638번: 센티와 마법의 뿅망치
https://www.acmicpc.net/problem/19638
코드
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, H, T; // 거인 수, 센티 키, 뿅망치 횟수
cin >> N >> H >> T;
priority_queue<int, vector<int>> pq;
while (N--) {
int tmp;
cin >> tmp;
pq.push(tmp);
}
// 처음부터 센티 키가 가장 큰 거인의 키보다 크다면
if (pq.top() < H) {
cout << "YES\n" << 0;
return 0;
}
for (int i = 1; i <= T; i++) {
int max = pq.top();
if (max > 1) {
pq.pop();
pq.push(max / 2);
}
if (pq.top() < H) {
cout << "YES\n" << i;
return 0;
}
}
cout << "NO\n" << pq.top();
return 0;
}
풀이
내림차순으로 정렬되는 우선순위 큐(최대 힙)를 생성해 원소를 N
개 저장한 다음,
T
번만큼 반복을 돌면서 pq.top()
을 2
로 나눈 값을 큐에 삽입한 후, pq.top()
이 H
보다 크다면 “YES”
와 반복을 돈 횟수
를 출력하고 종료한다.
만약 반복문을 다 돌고나서도 pq.top()
이 H
보다 작거나 같으면 “NO”
와 pq.top()
을 출력하고 종료한다.
주의할 점
처음부터 H
가 pq.top
보다 큰 상황을 고려해야 한다!!
⇒ 첫 뿅망치를 때리기 전, 즉 for문을 돌기 전에 pq.top()
과 H
를 비교해 H
가 크다면 “YES”
와 0
을 출력하고 종료한다.
'99클럽 TIL' 카테고리의 다른 글
99클럽 코테 스터디 23일차 TIL + 이차원 벡터(C++) (0) | 2024.11.19 |
---|---|
99클럽 코테 스터디 22일차 TIL + 힙(C++) (0) | 2024.11.19 |
99클럽 코테 스터디 20일차 TIL + 완전탐색(C++) (0) | 2024.11.16 |
99클럽 코테 스터디 19일차 TIL + 힙(C++) (0) | 2024.11.15 |
99클럽 코테 스터디 18일차 TIL + 큐(C++) (1) | 2024.11.14 |