(Java) 프로그래머스 - 디펜스 게임

2023. 7. 29. 21:09·코딩 테스트

입력값이 매우 큰 편이었기 때문에 O(n) 이내에 끝내야겠다는 생각을 했다.

처음에는 내림차순으로 정렬을 하고 k를 우선적으로 사용하고, 나머지는 n을 사용하는 로직을 생각했다가

잘못된 로직이라는 것을 깨닫고 우선순위 큐를 이용하여 풀었다.

어떻게 생각하냐에 따라 엄청 간단한 문제일 수도 있지만, 내가 배배 꼬아서 생각했던지 풀이에 오랜 시간이 걸렸다.


로직

먼저 enemy 배열을 순회하며 n을 빼주고 우선순위 큐에 삽입한다.

만약 n이 음수로 내려간다면, 지금까지 지나왔던 라운드에 가장 큰 값이 우선순위 큐에 첫 번째 값으로

들어 있으니 그 값을 빼서 다시 n에 더해준다.

이렇게 하면 지나온 라운드 중 가장 큰 값에만 무적권을 쓰게 된 것과 같다.

더 이상 쓸 수 있는 무적권이 없다면 순회를 종료하면 된다.

 

최종 코드

import java.util.*;

class Solution {
	public int solution(int n, int k, int[] enemy) {
		int answer = 0;

		PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

		for (int i = 0; i < enemy.length; i++) {
			n -= enemy[i];
			pq.add(enemy[i]);

			if (n < 0) {
				if (k > 0) {
					n += pq.poll();
					k--;
				} else {
					break;
				}
			}
			answer++;
		}
		return answer;
	}
}
저작자표시 (새창열림)

'코딩 테스트' 카테고리의 다른 글

(Java) 프로그래머스 - 미사일 요격  (0) 2023.11.08
(Java) 프로그래머스 - 리코쳇 로봇  (0) 2023.08.01
(Java) 프로그래머스 - 광물 캐기  (0) 2023.07.25
(Java) 프로그래머스 - 미로 탈출  (0) 2023.07.22
(Java) 프로그래머스 - 테이블 해시 함수  (0) 2023.07.19
'코딩 테스트' 카테고리의 다른 글
  • (Java) 프로그래머스 - 미사일 요격
  • (Java) 프로그래머스 - 리코쳇 로봇
  • (Java) 프로그래머스 - 광물 캐기
  • (Java) 프로그래머스 - 미로 탈출
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 프로그래머스 - 디펜스 게임
상단으로

티스토리툴바