코딩테스트 연습 - 야근 지수 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

매 시간마다 가장 크기가 큰 작업량을 -1씩 해주면 된다. priority_queue를 이용하면 가장 큰 값이 맨 위로 올라오므로 뽑고 -1 해주고 다시 집어넣어주면 된다. while(n--)만 할시에 queue가 비어있을 때에도 실행이 되므로 !pq.empty()를 붙여주자.

 

#include<iostream>
#include<vector>
#include<queue>

using namespace std;

long long solution(int n, vector<int> works) {
	long long answer = 0;
	priority_queue<int> pq;
	for (int i = 0; i < works.size(); i++) {
		pq.push(works[i]);
	}
	while (n--&&!pq.empty()) {
		int val = pq.top();
		pq.pop();
		if (--val != 0) {
			pq.push(val);
		}
	}
	while (!pq.empty()) {
		long long val = pq.top();
		pq.pop();
		answer += val * val;
	}
	cout << answer;
	return answer;
}

+ Recent posts