프로그래머스

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

programmers.co.kr

 

우선순위 큐를 이용하면 간단하게 풀 수 있는 문제

 

#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(int n, int k, vector<int> enemy) {
    int sum = 0;
    
    // 우선순위 큐를 오름차순으로 정렬
    priority_queue<int, vector<int>, greater<int>> prio_q;
    
    for(int i = 0; i < enemy.size(); i++) {
        prio_q.push(enemy[i]);
        
        // 무적권보다 라운드 수가 많아지면
        if(prio_q.size() > k) { 
        	// 적이 가장 작은 라운드의 적 수를 더함
            sum += prio_q.top();
            // 이후 제거
            prio_q.pop();
        }
        
        // 적의 수가 병사보다 많으면 막아낸 라운드 수 리턴
        if(sum > n) return i;
    }
    
    return enemy.size();
}

+ Recent posts