νλ‘κ·Έλλ¨Έμ€ - λνμ€ κ²μ
https://school.programmers.co.kr/learn/courses/30/lessons/142085
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
λ¬Έμ
- μ²μμ λ³μ¬ nλͺ μ κ°μ§κ³ μλ€. (1 ≤ n ≤ 1,000,000,000)
- λ§€ λΌμ΄λλ§λ€ enemy[i] λ§λ¦¬μ μ μ΄ λ±μ₯(1 ≤ enemy[i] ≤ 1,000,000)
- enemy[i]μλ i + 1 λΌμ΄λμμ 곡격ν΄μ€λ μ μ μκ° λ΄κ²¨μλ€.
- λ¨μ λ³μ¬ μ€ enemy[i]λͺ λ§νΌ μλͺ¨νμ¬ enemy[i]λ§λ¦¬μ μ μ λ§μ μ μλ€.
- 무μ κΆμ μ¬μ©νλ©΄ λ³μ¬μ μλͺ¨μμ΄ ν λΌμ΄λμ 곡격μ λ§μ μ μλ€.
- 무μ κΆμ μ΅λ kλ² μ¬μ©ν μ μλ€. (1 ≤ k ≤ 500,000)
- μ΅λ λͺ λΌμ΄λκΉμ§ λ§μ μ μλμ§ κ΅¬νκΈ°
μ μΆλ ₯ μμ
- μ λ ₯ : n = 7, k= 3, enemy = {4, 2, 4, 5, 2, 3, 1}
- κ²°κ³Ό : 5
- 1, 3, 5 λΌμ΄λμ 곡격μ 무μ κΆμΌλ‘ λ§μλ΄κ³ , 2, 4 λΌμ΄λμ κ°κ° λ³μ¬λ₯Ό 2λͺ , 5λͺ μλͺ¨νλ©΄ 5λΌμ΄λκΉμ§ 곡격μ λ§μ μ μλ€.
- 1, 3, 4λ²μ§Έ 곡격μ 무μ κΆμΌλ‘ λ§μλ΄κ³ , 2, 5 λ²μ§Έ 곡격μ κ°κ° λ³μ¬λ₯Ό 2λͺ , 3λͺ μλͺ¨νμ¬ 5λΌμ΄λκΉμ§ 곡격μ λ§μ μ μλ€.
νμ΄
- μ¬κ· => μκ°μ΄κ³Ό
μ²μμ λ μ€λ₯Έ νμ΄λ μ¬κ·μλ€. λ€μ μ΄λ€ μ λ€μ΄ μ€λμ§ λͺ¨λ₯΄κ³ , μ νν μ μλ 건 무μ κΆμ (μΈμ§, μμΈμ§) μ΄λ€. κ³μ μ νμ νμ¬ λ¨μ λ³μ¬κ° μκ±°λ 무μ κΆμ λ€μ°λ©΄ μ’ λ£νκ² νλ€.
μνμκ°μ΄ 2^nμΈλ°, nμ΄ μ΅λ 100λ§μ΄λ μ΅μ μ κ²½μ° 2^100λ§μ΄ κ±Έλ¦°λ€. μκ°μ΄κ³Όκ° λλ€.
λ΄κ° μκ³ μλ μκ³ λ¦¬μ¦μ λ μ¬λ¦¬λ©° μκ° μ΄κ³Όλ₯Ό λ§μ λ°©λ²μ μκ°ν΄μΌ νλλ° μ λ μ€λ₯Έλ€.. κ·Έλ¬λ€κ° λ¬Έμ μ κ²μνμμ ννΈλ₯Ό μ°Ύμ μ μμλ€. (https://school.programmers.co.kr/questions/43442)
μλ£κ΅¬μ‘°λ₯Ό μκ°ν΄μΌ νλ€.
- μ΅λν
- nμ΄ 0 λ―Έλ§μ΄ λλ©΄, μ΄μ λΌμ΄λμμ 무μ κΆμ μ¨μ λ€μ μ΄μλλ€.
- μ°μ μμνλ‘ κ΅¬ννλ€.
- μνμκ° : μ½μ
μ O(log n), μμ λ O(log n)
- μ΄ n(log n) μ΄ κ±Έλ¦¬λ―λ‘, μ¬κ·λ‘ ꡬννμ λμ 2^nλ³΄λ€ ν¨μ¬ μλ€.
μ½λ
import java.util.*;
class Solution {
public int solution(int n, int k, int[] enemy) {
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder()); //μ§κΈκΉμ§ λ§μ λ³μ¬ μ μ μ₯
int answer = 0; //μ λ΅ : λͺ λΌμ΄λκΉμ§ λ§μ μ μλμ§
for(int e : enemy) {
n -= e; //λ³μ¬λ‘ λ§μ
maxHeap.add(e); //λ§μ λ³μ¬μ μ μ₯
if(n < 0) { //λ¨μ λ³μ¬κ° μκ³
if(k <= 0) { //무μ κΆμ΄ μμΌλ©΄
break; //λΌμ΄λ μ’
λ£
}
//μμ§ λ¬΄μ κΆμ΄ μμΌλ©΄
n += maxHeap.poll(); //μ§λμ¨ λΌμ΄λ μ€ κ°μ₯ λ§μ μ μ λ€μ λΆνμν€κΈ°
k--; //무μ κΆ μ¬μ©
}
answer++; //λΌμ΄λ μ§λ¨
}
return answer;
}
}
κ²°κ³Ό

λ°°μ΄μ
- μκ° λ§μ λλ μνλ§κ³ μλ£κ΅¬μ‘°λ₯Ό μκ°ν΄λ³΄κΈ°
- μ΅λν : μ°μ μμνλ₯Ό μ΄μ©ν΄μ ꡬνν μ μμ
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
- μ°μ μμ νμ μνμκ° : μ½μ μ O(log n), μμ λ O(log n)