Publish:

νƒœκ·Έ: , , , , ,

μΉ΄ν…Œκ³ λ¦¬:

img_3.png

문제

문제 링크

img_3.png

img_4.png

μ„€λͺ…

μ€€ν˜Έκ°€ κ°€μ§„ 병사(n) 와 β€˜λ¬΄μ κΆŒβ€™ k 개λ₯Ό μ΄μš©ν•΄ λͺ‡ enemy λ°°μ—΄μ˜ λͺ‡λ²ˆμ§Έ μΈλ±μŠ€κΉŒμ§€ 갈 수 μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 문제

풀이

  1. λ¬΄μ κΆŒμ€ μ΅œλŒ€ν•œ 적ꡰ이 λ§Žμ€ λΌμš΄λ“œμ— μ‚¬μš©ν•˜λŠ” 것이 μœ λ¦¬ν•˜λ‹€. -> PriorityQueue 둜 λ¬΄μ κΆŒμ„ μ‚¬μš© ν•  적ꡰ 수λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•΄ μ΅œλŒ€ νž™μ„ μ‚¬μš©ν•œλ‹€.
  2. 각 λΌμš΄λ“œλ§ˆλ‹€ 적의 수λ₯Ό maxHeap 에 μ €μž₯ν•˜κ³ , n μ—μ„œ 적ꡰ 수λ₯Ό μ œκ±°ν•˜λ©΄μ„œ μ§„ν–‰ν•œλ‹€.
  3. μ€€ν˜Έκ°€ κ°€μ§„ λ³‘μ‚¬μ˜ μˆ˜κ°€ λͺ¨λ‘ μ†Œμ§„λ˜λ©΄, maxHeap μ—μ„œ μ΅œλŒ€κ°’μ„ κΊΌλ‚΄(maxHeap.poll()) λΌμš΄λ“œλ₯Ό 톡과할 수 μžˆλ„λ‘ ν•œλ‹€.
    • β€˜λ¬΄μ κΆŒβ€™ 을 μ‚¬μš©ν•œλ‹€λŠ” 의미 : νž™μ—μ„œ κΊΌλ‚Έ 값을 λ‹€μ‹œ n 에 μΆ”κ°€ν•œλ‹€. 즉, μ€€ν˜Έμ˜ 병사λ₯Ό λ³΄μΆ©ν•œλ‹€.
    • β€˜λ¬΄μ κΆŒβ€™ 을 μ‚¬μš©ν–ˆμœΌλ―€λ‘œ -1 ν•˜κ³ , λ‹€μŒ λΌμš΄λ“œλ‘œ λ„˜μ–΄κ°”λ‹€λŠ” 의미둜 answer λ₯Ό +1 ν•΄μ€€λ‹€.
    • λ§Œμ•½ μ€€ν˜Έμ˜ 병사도 μ—†κ³ (n < 0), β€˜λ¬΄μ κΆŒβ€™λ„ μ—†λ‹€(k < 0)λŠ” μ˜λ―ΈλŠ” 더이상 진행이 λΆˆκ°€λŠ₯ ν•œ κ²½μš°μ΄λ―€λ‘œ break
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
  public int solution(int n, int k, int[] enemy) {
    int answer = 0;
    PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Comparator.reverseOrder());
    for (int i = 0; i < enemy.length; i++) {
      maxHeap.add(enemy[i]);
      n -= enemy[i];

      if (n < 0) {
        if (k > 0) {
          n += maxHeap.poll();
          k--;
        } else {
          break;
        }
      }
      answer++;
    }
    return answer;
  }
}
λ°©λ¬Έν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! λŒ“κΈ€,지적,ν”Όλ“œλ°± μ–Έμ œλ‚˜ ν™˜μ˜ν•©λ‹ˆλ‹€πŸ˜Š

λŒ“κΈ€λ‚¨κΈ°κΈ°