본문 바로가기

코딩테스트/프로그래머스

[프로그래머스] 디펜스 게임

728x90
반응형


🔗 문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/142085

 

프로그래머스

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

programmers.co.kr


반응형
728x90

👩‍💻 코드

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

using namespace std;

int solution(int n, int k, vector<int> enemy) {
    priority_queue<int> pq;
    int sum = 0;
    
    for (int i = 0; i < enemy.size(); i++) {
        pq.push(enemy[i]);
        sum += enemy[i];
        
        if (sum > n) {
            if (k > 0) {
                sum -= pq.top();
                pq.pop();
                k--;
            } else {
                return i;
            }
        }
    }
    
    return enemy.size();
}

📝 풀이

라운드가 시작하면 적의 수를 우선순위 큐에 넣고, 적의 총 수를 계산합니다.

적의 총 수가 병사의 수보다 많으면 가장 많은 적이 나오는 라운드에 무적권을 사용합니다.

만약 무적권이 없다면 그 라운드가 최대이기 때문에 i를 return 합니다.

반복문이 종료되면 모든 라운드를 막았다는 의미이므로 모든 라운드 값을 return 합니다.

728x90
반응형