본문 바로가기

알고리즘 공부 및 문제 풀이/프로그래머스(PRO)

[pro] 프로그래머스 level2 142085 디펜스 게임 (Java) - 시뮬레이션

[문제]

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

 

프로그래머스

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

programmers.co.kr

 

[풀이]

단순 구현. 우선순위큐를 이용하여 가장 병사가 많은 라운드에서 무적권을 사용할 수 있도록 해준다.

 

[코드]

 

import java.util.*;

class Solution {
    public int solution(int n, int k, int[] enemy) {
        int answer = 0;
        //준호가 몇 라운드까지 막을 수 있는지 return 
        
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
        int idx;
        for(idx=0; idx<enemy.length; idx++){
            n -= enemy[idx];
            pq.add(enemy[idx]);
            if(n<0 && k>0 && !pq.isEmpty()){
                int e = pq.poll(); //무적권 사용
                n += e;
                k--;
            }
            else if(n<0 && k<=0) break;
            
        }
        
        answer = idx;
        
        return answer;
    }
}