-
[프로그래머스] 야근 지수문제 풀이 2020. 6. 8. 20:22
풀이)
제곱들의 합이 최소여야 한다. -> 큰 숫자일수록 제곱하면 크기가 엄청 커지므로, 큰 work원소부터 줄여준다.
큰 원소부터 1씩 줄여주기 위해 Priority queue를 사용했다.
PQ는 내림차순으로 정렬되므로 n번만큼 PQ의 top을 pop한 후, 값을 1 줄인 후 다시 PQ에 넣는 과정을 반복하면 된다.
만일 n번만큼 하기도 전에 모든 work원소가 0이면 야근을 할 필요 없다는 뜻이므로 바로 0을 return한다.
코드)
#include <string> #include <vector> #include <queue> using namespace std; long long solution(int n, vector<int> works) { long long answer = 0; priority_queue <int> qu; for(int i=0;i<works.size();i++){ qu.push(works[i]); } while(n--){ int temp = qu.top(); if(temp ==0) break; qu.pop(); temp--; qu.push(temp); } if(n>0) return 0; else{ while(!qu.empty()){ int temp = qu.top(); if(temp ==0) break; qu.pop(); answer += temp*temp; } } return answer; }
'문제 풀이' 카테고리의 다른 글
[프로그래머스] 올바른 괄호의 개수 (0) 2020.06.10 [프로그래머스] 지형 편집 (0) 2020.06.09 [프로그래머스] 배달 (0) 2020.06.08 [프로그래머스] 4단 고음 (0) 2020.06.07 [프로그래머스] 호텔 방 배정 (0) 2020.06.05