문제출처 : https://www.acmicpc.net/problem/23254
code
#include <iostream>
#include <queue>
#define MAX 200000
using namespace std;
int a[MAX];
priority_queue<pair<int, int>>pq;
int main()
{
ios::sync_with_stdio(false);
int x,i, N, M, time, answer = 0;
cin >> N >> M;
time = N * 24;
for (i = 0; i < M; i++)
{
cin >> a[i];
answer += a[i];
}
for (i = 0; i < M; i++)
{
cin >> x;
pq.push({ x, 100 - a[i] });
}
while (!pq.empty() && time > 0)
{
int score_per_hour = pq.top().first;
int rest_score = pq.top().second;
pq.pop();
if (rest_score >= score_per_hour)
{
answer += score_per_hour;
pq.push({ score_per_hour, rest_score - score_per_hour });
time--;
}
else
pq.push({ rest_score, rest_score });
}
cout << answer;
return 0;
}
오늘 하루종일 고민했는데 결국 못풀었다 ㅠㅠ
구글링해서 풀어놓은 블로그를 참고해서 풀었다.
참고블로그출처 : https://kukekyakya.tistory.com/512
큐 자료구조는 이제 어느정도 알겠는데, 구현을 아직 못하겠다..
어떻게 써먹으면 좋을지, 어떤 상황에서 쓰는지,
언제 pop하는지 언제 push하는지 감이안온다.
문제도 많이 풀어보면 언젠가는 능수능란하게 다룰수 있지 않을까? ㅠㅠ