⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.
콘센트가 여러개 존재하고, 그 콘센트를 빠르게 채워넣어야지 빠른 시간안에 충전을 할 수 있을 것이다.
비동기처럼 생각해서 문제를 해결했다. 일단 콘센트가 주어지면, 무조건 제일 오래 충전해야하는 애들을 집어넣고 그 뒤에 빈 곳에 넣어주면 됩니다. 근데 빈곳이 없고 전부 차있다면? 제일 적은 시간동안 충전하는 콘센트에 다시 충전하려고 꽂아주면 됩니다.
그렇게 계속해서 비교해가면서 충전을 계속한 결과, 가장 긴 충전시간이 걸린 콘센트를 구하면 답이 나옵니다.
우선순위 큐를 이용해서 가장 긴 충전시간을 구했고, 배열을 이용해서 계속해서 비교를 했습니다. 아마 더 나은 방법이 존재할 텐데 콘센트의 길이 입력이 1이상 10이하이고, 전자기기의 개수가 10,000개이여서 시간적인 문제는 없을 것이란 판단하에 문제를 충분히 해결할 수 있었습니다. 아래는 정답코드입니다.
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int n,m,number,power[11];
priority_queue<int> pq;
void init() {
cin >> n >> m;
for(int i = 0; i < n; i++){
cin >> number;
pq.push(number);
}
}
void solve() {
int time = 0;
memset(power,0,sizeof(power));
while(!pq.empty()){
int idx = -1;
int current = 987654321;
int electric = pq.top();
for(int i = 0; i < m; i++){
if(power[i] < current){
current = power[i];
idx = i;
}
}
power[idx] += electric;
pq.pop();
}
int answer = 0;
for(int i = 0; i < m; i++){
if(answer < power[i]){
answer = power[i];
}
}
cout << answer;
}
int main(){
init();
solve();
return 0;
}
'PS > BaekJoon' 카테고리의 다른 글
[C++/24391] 귀찮은 해강이 (0) | 2024.07.29 |
---|---|
[C++/17089] 세친구 (0) | 2024.07.23 |
[C++/20002] 사과나무 (0) | 2024.07.22 |
[C++/1239] 차트 (0) | 2024.07.17 |
[C++/9519] 졸려 (0) | 2024.07.17 |