https://school.programmers.co.kr/learn/courses/30/lessons/142085
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
접근 방법
- 데이터 범위가 n이 10억 이하, k가 50만 이하, enemy배열의 길이가 100만 이하 이다.
- 따라서 enemy배열을 O(n^2)미만의 알고리즘으로 순회하며 답을 찾아야한다
- 이전 공격을 저장했다가 가장 낮은 데미지의 공격과 현재 공격을 비교해가며 답을 찾았다.
- 우선 k의 수만큼 pq(== 무적권 스킬을 쓸 라운드의 공격력들)에 담는다
- 가장 낮은 공격력과 현재 공격력을 비교한다
- 현재 공격력이 높다면 이걸 무적권을 써야하므로 pq에 넣는다
- 아니라면 현재 공격력을 뺀다
- n이 0 보다 작아진다면 이번 라운드를 막지 못하므로 종료
코드
import java.util.*;
class Solution {
public int solution(int n, int k, int[] enemy) {
if(k == enemy.length) return k;
int ans = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int e : enemy){
if(k > 0){
k--;
pq.offer(e);
}else{
int num = pq.poll();
if(num < e){
pq.offer(e);
n-=num;
}else{
n-=e;
pq.offer(num);
}
if(n < 0) break;
}
ans++;
}
return ans;
}
}
'Algorithm' 카테고리의 다른 글
[프로그래머스] LV 2 124나라의 숫자 (0) | 2024.11.09 |
---|---|
[코드트리] G2 루돌프의 반란 (2) | 2024.11.08 |
[프로그래머스] LV 3 섬 연결하기 (0) | 2024.11.05 |
[프로그래머스] LV 2 거리두기 확인하기 (0) | 2024.11.04 |
[프로그래머스] LV2 가장 큰 정사각형 찾기 (2) | 2024.11.04 |