https://school.programmers.co.kr/learn/courses/30/lessons/12927
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr


처음에는 형태와 예시가 총 작업량에서 n만큼 빼주고 적당히 분배해주면 되는게 아닌지 생각했었는데
그렇게하면 정형화된 식으로 나타내기도 어렵고 계산자체도 너무 복잡해질 것 같아서 다른 방향으로 생각해봤을 때
많은 일부터 하나씩 빼준다음에 남은 것은 야근지수로 계산하면 되지 않을까했다.
이때 우선 순위 큐를 사용하여 항상 가장 큰 작업만을 가져오도록 하였다.
#include <vector>
#include <queue>
#include <numeric>
using namespace std;
long long solution(int n, vector<int> works) {
long long total = accumulate(works.begin(), works.end(), 0LL);
// 모든 일을 다 처리할 수 있으면 피로도 0
if (total <= n) return 0;
priority_queue<int> pq;
for (int work : works) {
pq.push(work);
}
while (n--) {
int cur = pq.top();
pq.pop();
pq.push(cur - 1);
}
long long answer = 0;
while (!pq.empty()) {
long long x = pq.top();
pq.pop();
answer += x * x;
}
return answer;
}'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][C++][LV2]당구 연습 (1) | 2024.08.13 |
|---|---|
| [프로그래머스][LV2][C++]3*n 타일링 (1) | 2024.07.17 |
| [프로그래머스][LV2][C++]교점에 별 만들기 (1) | 2024.07.16 |
| [프로그래머스][LV2][C++][PCCP 기출문제] 2번 / 석유 시추 (0) | 2024.07.12 |
| [프로그래머스][LV2][C++]택배 배달과 수거하기 (0) | 2024.07.11 |




















