알고리즘

프로그래머스 - PCCP 모의고사 2회 - 신입사원 교육

SniKuz 2024. 5. 26. 16:14

링크 : https://school.programmers.co.kr/learn/courses/15009/lessons/121688

 

프로그래머스

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

programmers.co.kr


문제 설명

신입사원의 능력치가 들어있는 ability라는 데이터가 있습니다.
신입사원 2명을 짝지어 교육시키면 두 신입사원 모두 능력치가 둘의 합이 됩니다.
즉, 능력치가 3과 7인 신입사원을 같이 교육시키면 두 사원의 능력치가 모두 10이 됩니다.
한번 교육된 사람도 다시 교육 시킬 수 있습니다.
신입사원의 능력치 총합을 최소화 시키도록 교육하면, 능력치의 총합이 몇인지 구하세요.


아이디어

가장 능력치가 낮은 2명을 계속 더하면 최소 값이 됩니다. 


코드

#include <bits/stdc++.h>

using namespace std;

int solution(vector<int> ability, int number) {
    int answer = 0;
    priority_queue<int, vector<int>, greater<int>> pq;
    for(const auto& a : ability)
    {
        pq.push(a);
    }
    for(int i = 0; i < number; ++i)
    {
        int first = pq.top(); pq.pop();
        int second = pq.top(); pq.pop();
        int teach = first+second;
        pq.push(teach); pq.push(teach);
    }
    while(!pq.empty())
    {
        answer += pq.top();
        pq.pop();
    }
    return answer;
}