문제
https://www.acmicpc.net/problem/19638
걸린 시간
00 : 24 : 51
풀이
C++
#include <bits/stdc++.h>
#define INF 987654321
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, Hcenti, t;
cin >> n >> Hcenti >> t;
priority_queue<int, vector<int>, less<int>> Hgiant;
int h;
for(int i = 0; i < n; i++){
cin >> h;
Hgiant.push(h);
}
for(int i = 0; i < t; i++){
int tallest = Hgiant.top();
if(tallest < Hcenti){
cout << "YES\n" << i << "\n";
return 0;
}
else if(tallest > 1){
Hgiant.pop();
Hgiant.push(tallest/2);
}
}
if(Hgiant.top() < Hcenti)
cout << "YES\n" << t << "\n";
else
cout << "NO\n" << Hgiant.top() << "\n";
return 0;
}
문제에서 매번 가장 키가 큰 거인을 뿅망치로 내려친다는 전략이 주어지지 않았으면 난이도가 조금 높아졌을듯 한 문제.
최대 힙을 사용하면 쉽게 풀이할 수 있다.
처음 문제를 접했을 때 하한 기호에 겁먹고 모두 읽지도 않은 채 다른 문제로 넘어갔었다. 쫄지말자.
'Baekjoon' 카테고리의 다른 글
Baekjoon 1138번 한 줄로 서기 (0) | 2020.09.08 |
---|---|
Baekjoon 2631번 줄세우기 (0) | 2020.09.08 |
Baekjoon 19637번 IF문 좀 대신 써줘 (0) | 2020.09.07 |
Baekjoon 19582번 200년간 폐관수련했더니 PS 최강자가 된 건에 대하여 (0) | 2020.09.05 |
Baekjoon 19583번 싸이버개강총회 (0) | 2020.09.04 |
댓글