코딩 공부 - 프로그래머스 - 야근 지수
문제
설명
- 1시간 동안 작업량 1만큼을 처리할 수 있다고 할 때,
- 퇴근까지 남은 N 시간과 각 일에 대한 작업량 works에 대해 야근 피로도를 최소화한 값을 구하기
- 야근 피로도 = 남은 작업량 * 남은 작업량
코드
#include <string>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
long long solution(int n, vector<int> works) {
long long answer = 0;
multiset<int, greater<int>> ms;
// 큰 수로 정렬되는 mulitset 초기화
for (int i = 0; i < works.size(); i++) {
ms.insert(works[i]);
}
// 야근까지의 남은 시간 동안
while(n > 0) {
auto tmp = ms.begin(); // 가장 큰 작업의 iterator 반환
auto num = *tmp; // 가장 큰 작업의 작업량
// 현재 남은 작업량이 0보다 큰 경우
// 작업량 - 1
if (num > 0) {
ms.erase(tmp);
ms.insert(num-1);
}
n--;
}
// 야근 피로도 구하기
for (auto it = ms.begin(); it != ms.end(); it++) {
answer += (*it) * (*it);
}
return answer;
}
공유하기
Twitter Facebook LinkedIn댓글을 남기시려면 Github 로그인을 해주세요