C++:: 프로그래머스 < 야근 지수 >

jahlee·2023년 9월 11일
0

프로그래머스_Lv.3

목록 보기
17/29
post-thumbnail

야근 지수가 가장 적게끔 일을 해서 그 결과를 리턴해 주면 되는 문제이다. 최대한 높은 작업량 순으로 하나씩 일을 하면 된다.

#include <string>
#include <vector>
#include <map>
using namespace std;

long long solution(int n, vector<int> works) {
    long long answer = 0;
    map<int, int, greater<int>> m;// 작업량이 큰것들 먼저 해줘야 하기 때문에 내림차순 정렬
    for (auto& work : works) {// 작업량 별 개수 저장
        m[work]++;
    }
    for (auto& work : m) {
        if (n == 0 || !work.first) break ;// 더 이상 작업 못하거나, 남은 작업이 없다면
        int cnt = work.second < n ? work.second : n;
        m[work.first-1] += cnt;// 작업량 - 1 의 개수 추가
        work.second -= cnt;// 현재 작업량 에서 처리한 일만큼 개수를 빼준다.
        n -= cnt;// 일한만큼 행동 빼주기
    }
    for (auto& work : m) {
        answer += 1LL * work.second * work.first * work.first;
    }
    return answer;
}

0개의 댓글