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

배열의 요소들을 순서대로 n에 마이너스 연산을 한다.
그러다가 n이 0보다 적어지는 순간! 무적권 발동~~
그런데 무적권은 적어지는 순간 그 라운드에 써야할까?
아니다 최대한 많은 라운드를 격파해야 함으로 싸워왔던 라운드 중 가장 큰 수의 라운드에서 써야한다.
그렇다면 매 라운드 병사의 수를 PriorityQueue에 넣고(오름차순 우선) 무적권 발동 시 poll하여 n에 더해주기만 하면 될 것이다.
import java.util.PriorityQueue;
class Solution {
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.solution(7, 3, new int[] { 4, 2, 4, 5, 3, 3, 1 }));
}
public int solution(int n, int k, int[] enemy) {
int answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>((o1, o2) -> o2.compareTo(o1));
for (int i = 0; i < enemy.length; i++) {
pq.offer(enemy[i]);
n -= enemy[i];
if (n < 0) {
if (k > 0) {
k--;
n += pq.poll();
} else
break;
}
answer++;
}
return answer;
}
}
'알고리즘 > Lv2. 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCP 기출문제] 2번 / 석유 시추 (0) | 2024.09.11 |
---|---|
[프로그래머스] 요격 시스템 -JAVA (0) | 2024.09.10 |
[프로그래머스]무인도 여행 -JAVA (4) | 2024.09.04 |
[프로그래머스]귤 고르기 -JAVA (0) | 2024.08.21 |
[프로그래머스] 점프와 순간 이동 -JAVA (0) | 2024.08.20 |