알고리즘/프로그래머스
[C++] (우선순위 큐) 큰 숫자만 계속 고르기
parkkingcar
2023. 7. 28. 21:59
큰 숫자만 계속 고르기
n개의 숫자가 주어졌을 때 그 중 가장 큰 숫자를 골라 1씩 빼는 작업을 m번 반복하려고 합니다. 이를 반복한 이후 남아있는 숫자들 중 최댓값을 구하는 프로그램을 작성해보세요. 단, 가장 큰 숫자가 여러 개라면 이 중 아무거나 하나를 골라 진행하면 됩니다.
입출력 예제
입력:
5 4
1 5 4 2 1
출력:
3
처음에 [1, 5, 4, 2, 1] 이 있습니다.
이 중 최대를 골라 1을 빼주면 결과는 [1, 4, 4, 2, 1]이 됩니다.
(1회) 이 중 최대를 골라 1을 빼주면 결과는 [1, 3, 4, 2, 1]이 됩니다.
(2회) 이 중 최대를 골라 1을 빼주면 결과는 [1, 3, 3, 2, 1]이 됩니다.
(3회) 이 중 최대를 골라 1을 빼주면 결과는 [1, 2, 3, 2, 1]이 됩니다.
(4회) 따라서 남아있는 숫자들 중 최댓값은 3이 됩니다.
풀이
#include <iostream>
#include <queue>
using namespace std;
int main() {
int n, m;
priority_queue<int> pq;
cin >> n >> m;
for(int i = 0; i < n; i++){
int num1;
cin >> num1;
pq.push(num1);
}
for(int i = 0; i < m; i++){
int num2;
num2 = pq.top() - 1;
pq.pop();
pq.push(num2);
}
cout << pq.top();
return 0;
}