디펜스 게임

LJM·2023년 8월 28일
0

programmers

목록 보기
84/92

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

우선순위 큐로 풀수 잇을거란 생각도 몬햇따

DP로 푸는 문제일까 생각했지만 아니다..

import java.util.*;

class Solution {
    public int solution(int n, int k, int[] enemy) {
        int answer = enemy.length;  // 최대 라운드 수로 초기화
        Queue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());  // 우선순위 큐 생성

        int my = n;  // 현재 병사 수
        int card = k;  // 사용 가능한 무적권 수

        for (int i = 0; i < enemy.length; i++) {
            my -= enemy[i];  // 병사를 사용하여 적을 막음
            pq.add(enemy[i]);  // 사용한 병사 수를 우선순위 큐에 추가

            // 병사가 부족한 경우
            while (my < 0) {
                // 무적권이 남아있고, 우선순위 큐가 비어있지 않다면
                if (card > 0 && !pq.isEmpty()) {
                    my += pq.poll();  // 가장 많은 병사를 사용한 라운드를 되돌림
                    card--;  // 무적권을 하나 사용
                } else {
                    answer = i;  // 더 이상 진행할 수 없으므로 현재 라운드를 저장
                    return answer;  // 함수 종료
                }
            }
        }
        return answer;  // 모든 라운드를 완료한 경우, 최대 라운드 수를 반환
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글