문제출처 : https://www.acmicpc.net/problem/23843
이걸 어떻게 풀어야겠다고 머리속에서는 생각이 되는데, 코드로 구현을 어떻게해야하는지 구상이 안떠오른다... 큐를 이용하라고는 하는데, 아직 부족한것 같다. 큐에대해서 공부를 좀 더 하고 풀어야 겠다.
참고블로그 : https://velog.io/@y-siro/%EB%B0%B1%EC%A4%80-23843-%EC%BD%98%EC%84%BC%ED%8A%B8
code
#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
int main()
{
int N, M, i, time = 0, sum = 0, index = 0, temp = 0;
cin >> N >> M;
vector<int>charge(N);
priority_queue<int>pq;
for (i = 0; i < N; i++)
cin >> charge[i], sum += charge[i];
sort(charge.begin(), charge.end(), greater<>());
if (M == 1)
cout << sum;
else if (M > N)
cout << charge[0];
else
{
index = M;
for (i = 0; i < M; i++)
pq.push(-charge[i]);
while (index < N)
{
temp = -pq.top();
pq.pop();
while (temp <= -pq.top() && index < N)
temp += charge[index], index++;
pq.push(-temp);
}
for (i = 0; i < M - 1; i++)
pq.pop();
cout << -pq.top();
}
return 0;
}
골드에 들어오면서 큐를 많이 쓰는것 같다.
나름 코드 짜서 이리 저리 굴려봤는데 시간초과나고 막이래서... 구글링했다..
참고한 블로그에서 굉장히 자세히 설명해주셔서 참고해서 짰다.
한걸음한걸음 큐에대해서 익숙해지는것같다. 한 2~3문제정도 더풀면 감잡을듯??? ㅠㅠㅠㅠ