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

Bong2·2024년 5월 8일
0

알고리즘

목록 보기
15/63

문제 - 디펜스 게임

문제 설명

문제 접근

  1. 무적권의 갯수만큼 우선순위 큐에 오름차순으로 정렬하여 저장(무적권을 사용할 때에는 적의 수가 큰 편인 경우에만 사용)
  2. 무적권을 사용한 적군 중 제일 작은 수와 현재 적군 수의 비교
    • 제일 작은수 < 현재 적군 수 : 현재 적군 수를 우선순위 큐의 제일 작은수와 교체, 나의 병사를 제일 작은 수만큼 빼준다.
    • 제일 작은수 >= 현재 적군 수 : 병사에 현재 적군 수만큼 빼준다.
  3. 나의 병사 수가 0보다 작은 경우 게임을 종료
import java.util.*;

class Solution {
    public int solution(int n, int k, int[] enemy) {
        int answer = 0;
        
        PriorityQueue <Integer> pq = new PriorityQueue<>();
        
        for(int i=0;i<enemy.length;i++)
        {
            //무적권을 사용한 적군의 수 저장
            if(k>0)
            {
                pq.offer(enemy[i]);
                k--;
                
            }else{
                //무적권 사용한 적군의 수와 현재의 적군 수 비교
                if(pq.peek() < enemy[i])
                {
                    int en = pq.poll();
                    n -= en;
                    pq.offer(enemy[i]);
                }else{
                    n -= enemy[i];
                }

                if(n < 0)
                {
                    break;
                }
            }
            
            answer++;
        }
        
        
        return answer;
    }
}
profile
자바 백엔드 개발자로 성장하자

0개의 댓글