-
[Programmers] 디펜스 게임 / ❌Algorithm/Programmers 2024. 10. 5. 16:14
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 제출 코드 (1시간 15분 57초 / 우선순위 큐)
import java.util.*; class Solution { public int solution(int n, int k, int[] enemy) { int answer = 0; PriorityQueue<Integer> pq = new PriorityQueue<>((o1, o2) -> { return o1 - o2; }); for(int i = 0; i < Math.min(k, enemy.length); i++) { pq.add(enemy[i]); } for(int i = Math.min(k, enemy.length); i < enemy.length; i++) { if(enemy[i] > pq.peek()) { n -= pq.poll(); pq.add(enemy[i]); } else { n -= enemy[i]; } if(n < 0) { break; } answer++; } answer += pq.size(); return answer; } }
2. 구현 로직
- pq를 만들어 무적권 스킬을 사용하는 값을 담아두려고 한다.
- enemy의 앞쪽부터 무적권 스킬을 사용하여 pq에 오름차순으로 넣는다.
- 그럼 K 이후의 enemy를 탐색하며 pq의 가장 앞에 숫자와 비교한다.
- 만약, pq의 가장 앞 숫자보다 enemy[i]의 값이 크다면 pq의 값을 빼고 enemy[i]를 넣는다.
- 그게 아니라면 n의 값을 enemy[i] 만큼 감소시킨다.
- n < 0 보다 작으면 종료한다.
3. 유의할 점
- 처음에 N의 값을 확인하고도 긴가민가 해서 백트래킹으로 시도했는데 역시나 시간복잡도 문제로 풀리지 않았다. 확신을 가지고 문제를 풀도록 해야겠다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 숫자 카드 나누기 / ⭕ (0) 2024.10.05 [Programmers] 점 찍기 / ❌ (0) 2024.10.05 [Programmers] 테이블 해시 함수 / ⭕ (0) 2024.10.04 [Programmers] 연속 부분 수열 합의 개수 / ⭕ (0) 2024.10.03 [Programmers] 택배 배달과 수거하기 / ❌ (1) 2024.10.02