GitHubSeob
C++ / 프로그래머스 / 야근 지수 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
우선순위 큐를 이용해 가장 큰 점수가 항상 앞에 오도록 했다.
works의 모든 원소의 합이 n이하라면 남은 작업량이 없으므로 answer은 0이 된다.
그 외의 경우는 n만큼 while문을 반복하면서, 우선순위 큐의 top부분을 1 빼고 우선순위에 다시 push한다.
n만큼 반복이 끝났으면 야근 지수를 구해야 한다.
우선순위의 top부분을 제곱한 값을 answer에 계속 더하고 pop한다.
계산이 끝났으면 return한다.
코드
#include <string>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
long long solution(int n, vector<int> works) {
long long answer(0), sum(0);
int idx(0);
priority_queue<int>pq;
for (idx = 0; idx < works.size(); ++idx) {
pq.push(works[idx]);
sum += works[idx];
}
if (sum <= n)
return 0;
while (n--) {
pq.push(pq.top() - 1);
pq.pop();
}
while (!pq.empty()) {
answer += (pow(pq.top(), 2));
pq.pop();
}
return answer;
}
'Programmers > Level 3' 카테고리의 다른 글
C++ / 프로그래머스 / 디스크 컨트롤러 (0) | 2023.06.27 |
---|---|
C++ / 프로그래머스 / 단어 변환 (0) | 2023.06.26 |
C++ / 프로그래머스 / 최고의 집합 (0) | 2023.06.26 |
C++ / 프로그래머스 / 연속 펄스 부분 수열의 합 (0) | 2023.06.26 |
C++ / 프로그래머스 / 아방가르드 타일링 (0) | 2023.06.25 |