[프로그래머스 C++] 야근 지수
[프로그래머스 C++] 야근 지수
https://school.programmers.co.kr/learn/courses/30/lessons/12927
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해결방안
우선순위 큐 priority_queue
힙 Heap
이 문제의 핵심은 "작업량을 최대한 균등하게 줄여서 남은 작업량의 제곱 합을 최소화하는 것"이다.
- 남은 작업량을 최대한 균등하게 줄여야 한다.
- 최대 힙을 사용해 현재 가장 작업량이 많은 일을 1만큼 줄이고, 다시 힙에 넣는 과정을 반복한다.
- 이렇게 하면 작업량이 많은 일부터 줄어들게 되고, 전체 작업량이 균등하게 분배된다.
- 정리해서 다시 말하면, 가장 큰 작업량을 줄이면서 남은 작업량의 제곱 합을 최소화 했다.
정답 코드
#include <iostream> #include <queue> #include <algorithm> #include <cmath> using namespace std; long long solution(int n, vector<int> works) { long long answer = 0; priority_queue<int> pQ; // 최대 힙을 이용해 작업량이 많은 순서대로 처리 int total = 0; // 전체 작업량 for(int i = 0; i < works.size(); i++){ total += works[i]; pQ.push(works[i]); // 최대 힙에 작업량을 추가 } if (total <= n) return 0; // 남은 작업량이 소진할 수 있는 야근 시간보다 적거나 같으면 피로도는 0 while (!pQ.empty() && n > 0) { // 힙이 비어있지 않고 n이 0보다 클 때까지 반복 int top = pQ.top(); // 최대 작업량을 가져옴 pQ.pop(); // 최대 작업량을 힙에서 제거 n--; // 야근 시간 1시간 소진 top--; // 최대 작업량 1시간 소진 pQ.push(top); // 줄어든 작업량을 다시 힙에 추가 } while(!pQ.empty()) { int top = pQ.top(); pQ.pop(); answer += pow(top, 2); // 작업량의 제곱을 더해서 피로도를 계산 } return answer; // 최종 피로도를 반환 } int main(){ cout << solution(4, { 4, 3, 3 }) << "\n"; cout << solution(1, { 2, 1, 2 }) << "\n"; cout << solution(3, { 1, 1 }) << "\n"; return 0; }
'⭐ 코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 C++] 베스트앨범 (0) | 2024.07.09 |
---|---|
[프로그래머스 C++] 최고의 집합 (0) | 2024.07.08 |
[프로그래머스 C++] 기지국 설치 (0) | 2024.06.18 |
[프로그래머스 C++] 단속카메라 (0) | 2024.06.17 |
[프로그래머스 C++] 징검다리 건너기 (0) | 2024.06.16 |
댓글
이 글 공유하기
다른 글
-
[프로그래머스 C++] 베스트앨범
[프로그래머스 C++] 베스트앨범
2024.07.09[프로그래머스 C++] 베스트앨범 https://school.programmers.co.kr/learn/courses/30/lessons/42579 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 해결전략 map자료구조 정답코드 #include #include #include #include #include using namespace std; bool Compare(pair& a, pair& b) { return a.second > b.second; // 두 장르의 재생 횟수를 비교하여 내림차순으로 정렬}vector solution(vect… -
[프로그래머스 C++] 최고의 집합
[프로그래머스 C++] 최고의 집합
2024.07.08 -
[프로그래머스 C++] 기지국 설치
[프로그래머스 C++] 기지국 설치
2024.06.18 -
[프로그래머스 C++] 단속카메라
[프로그래머스 C++] 단속카메라
2024.06.17
댓글을 사용할 수 없습니다.