https://school.programmers.co.kr/learn/courses/30/lessons/142085
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
* 남은 병사수와 무적권의 횟수를 잘 사용하여 최대로 막을 수 있는 횟수를 반환하면 되는 문제.
* 처음에는 병사수를 최대한 사용하고 무적권을 사용하면 되는줄 알았다.
* 그렇게 구현하기 쉽지않았고 결국 문제 풀이를 보니까 pq를 사용한 풀이였다.
* enemy 배열을 순차적으로 한개씩 가져와서 문제를 풀어야한다. ( 적은 인덱스 0번부터 접근하니까 )
* enemy 배열에 접근을 순차적으로 해서 무적권 갯수만큼은 pq에 저장하고 continue 한다.
* 무적권 갯수 이후에 enemy 배열에 접근할때 pq에 값을 빼서 병사수에서 차감한다.
* 만얀 차감했을때 음수라면 병사수를 모두 소진한 것이니 끝.
* 순서대로 처리해야한다는 강박에 무조건 순차적으로 처리해야 한다고 생각해서 못 풀었다.
* 라운드 내에서는 순서가 변경되도 상관없어서 pq로 처리하면 된다.
* 아래는 구현 코드이다.
import java.io.*;
import java.util.*;
class Solution {
int answer = 0, remainSoldiers = 0, useShields = 0;
public int solution(int n, int k, int[] enemy) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int e : enemy) {
pq.add(e);
if(pq.size() <= k) {
answer++;
continue;
}
int node = pq.poll();
n -= node;
if(n < 0) break;
answer++;
}
return answer;
}
}
'알고리즘 > 프로그래머스 LV2' 카테고리의 다른 글
프로그래머스 LV.2 구명보트 (0) | 2025.02.04 |
---|---|
프로그래머스 뒤에 있는 큰 수 찾기 ( LV 2 ) (1) | 2025.01.21 |
프로그래머스 귤 고르기 ( LV 2 ) + entrySet() 활용 (0) | 2025.01.21 |
프로그래머스 : 연속 부분 수열 합의 갯수 ( LV 2 ) (1) | 2025.01.19 |
프로그래머스 : 숫자 변환하기 ( LV 2 ) (0) | 2025.01.14 |