728x90
반응형
https://www.acmicpc.net/problem/23843
23843번: 콘센트
광재는 전자기기 대여사업을 시작했다. 퇴근하기 전에 다음날 손님들에게 빌려줄 N개의 전자기기를 충전하려 한다. 사용 가능한 콘센트는 M개가 있고, 성능은 모두 동일하다. 전자기기들은 한
www.acmicpc.net
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> time(n);
for(int i = 0; i < n; i++){
cin >> time[i];
}
sort(time.begin(), time.end(), greater<>());
if(m > n){ // 예외처리
cout << time[0] << endl;
return 0;
}
priority_queue<int, vector<int>, greater<int>> pq;
for(int i = 0; i < m; i++){
pq.push(time[i]);
}
for(int i = m; i < n; i++){
int t = pq.top() + time[i];
pq.pop();
pq.push(t);
}
for(int i = 0; i < m - 1; i++) pq.pop();
cout << pq.top() << endl;
return 0;
}
1. 충전에 필요한 시간을 내림차순으로 정렬한다. (많은 시간이 걸리는 전자기기부터 충전)
2. m개의 전자기기를 충전시킨다.
3. 먼저 충전이 끝나는 콘센트(오름차순 우선순위큐)부터 다음으로 충전 시간이 긴 기기를 충전시킨다.
4. 가장 오래 충전하는 콘센트의 시간을 출력한다.
** m > n일 때는 예외처리: 가장 충전 시간이 긴 전자기기 값이 정답이다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 11404번 플로이드 (C++) (0) | 2022.05.04 |
---|---|
[BOJ] 14938번 서강그라운드 (C++) (0) | 2022.05.04 |
[BOJ] 1700번 멀티탭 스케줄링 (C++) (0) | 2022.04.30 |
[BOJ] 11123번 양 한마리... 양 두마리... (C++) (0) | 2022.04.30 |
[BOJ] 3184번 양 (C++) (0) | 2022.04.30 |