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; // 모든 라운드를 완료한 경우, 최대 라운드 수를 반환
}
}