โœ๏ธToday I Learned

๐Ÿ“… 2025-10-31

  • ์šฐ์„ ์ˆœ์œ„ ํ
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค: ๋””ํŽœ์Šค ๊ฒŒ์ž„

์šฐ์„ ์ˆœ์œ„ ํ(priority_queue)

์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋จผ์ € ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด ๋จผ์ € ๋‚˜์˜ค๋Š” ์ผ๋ฐ˜ ํ์™€ ๋‹ฌ๋ฆฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ์ด ๋จผ์ € ๋‚˜์˜จ๋‹ค.
๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” Heap์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

Heap

  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ํ˜•ํƒœ (๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์™„์ „ํžˆ ์ฑ„์›Œ์ง„๋‹ค.)
  • ๋ถ€๋ชจ - ์ž์‹ ๊ฐ„ ํŠน์ • ๋Œ€์†Œ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  • ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„๋œ๋‹ค.

Heap์˜ ํ•ต์‹ฌ ๊ทœ์น™

  • Max Heap
    ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ํ•ญ์ƒ ์ž์‹๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ
  • Min Heap
    ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ํ•ญ์ƒ ์ž์‹๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ
  • ๋ถ€๋ชจ ์ž์‹ ๊ฐ„์˜ ๋Œ€์†Œ ๊ด€๊ณ„๋Š” ๋ณด์žฅํ•˜์ง€๋งŒ ํ˜•์ œ๊ฐ„ ์ˆœ์„œ๋Š” ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„ ์ •๋ ฌ

Heap์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ๊ณ„์† ์‚ฝ์ž…/์‚ญ์ œ ํ•˜๋ฉด์„œ ์ตœ์†Ÿ๊ฐ’/์ตœ๋Œ“๊ฐ’๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  • ์ „์ฒด ์ˆœ์„œ๋Š” ํ•„์š” ์—†์„ ๋•Œ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค: ๋””ํŽœ์Šค ๊ฒŒ์ž„

๋ฌธ์ œ ๋งํฌ
๋ฌธ์ œ ์„ค๋ช…
์ค€ํ˜ธ๋Š” ์š”์ฆ˜ ๋””ํŽœ์Šค ๊ฒŒ์ž„์— ํ‘น ๋น ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””ํŽœ์Šค ๊ฒŒ์ž„์€ ์ค€ํ˜ธ๊ฐ€ ๋ณด์œ ํ•œ ๋ณ‘์‚ฌ n๋ช…์œผ๋กœ ์—ฐ์†๋˜๋Š” ์ ์˜ ๊ณต๊ฒฉ์„ ์ˆœ์„œ๋Œ€๋กœ ๋ง‰๋Š” ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค. ๋””ํŽœ์Šค ๊ฒŒ์ž„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ค€ํ˜ธ๋Š” ์ฒ˜์Œ์— ๋ณ‘์‚ฌ n๋ช…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋งค ๋ผ์šด๋“œ๋งˆ๋‹ค enemy[i]๋งˆ๋ฆฌ์˜ ์ ์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.
๋‚จ์€ ๋ณ‘์‚ฌ ์ค‘ enemy[i]๋ช… ๋งŒํผ ์†Œ๋ชจํ•˜์—ฌ enemy[i]๋งˆ๋ฆฌ์˜ ์ ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๋‚จ์€ ๋ณ‘์‚ฌ๊ฐ€ 7๋ช…์ด๊ณ , ์ ์˜ ์ˆ˜๊ฐ€ 2๋งˆ๋ฆฌ์ธ ๊ฒฝ์šฐ, ํ˜„์žฌ ๋ผ์šด๋“œ๋ฅผ ๋ง‰์œผ๋ฉด 7 - 2 = 5๋ช…์˜ ๋ณ‘์‚ฌ๊ฐ€ ๋‚จ์Šต๋‹ˆ๋‹ค.
๋‚จ์€ ๋ณ‘์‚ฌ์˜ ์ˆ˜๋ณด๋‹ค ํ˜„์žฌ ๋ผ์šด๋“œ์˜ ์ ์˜ ์ˆ˜๊ฐ€ ๋” ๋งŽ์œผ๋ฉด ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
๊ฒŒ์ž„์—๋Š” ๋ฌด์ ๊ถŒ์ด๋ผ๋Š” ์Šคํ‚ฌ์ด ์žˆ์œผ๋ฉฐ, ๋ฌด์ ๊ถŒ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ‘์‚ฌ์˜ ์†Œ๋ชจ์—†์ด ํ•œ ๋ผ์šด๋“œ์˜ ๊ณต๊ฒฉ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌด์ ๊ถŒ์€ ์ตœ๋Œ€ k๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ค€ํ˜ธ๋Š” ๋ฌด์ ๊ถŒ์„ ์ ์ ˆํ•œ ์‹œ๊ธฐ์— ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ๋ผ์šด๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ค€ํ˜ธ๊ฐ€ ์ฒ˜์Œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ณ‘์‚ฌ์˜ ์ˆ˜ n, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฌด์ ๊ถŒ์˜ ํšŸ์ˆ˜ k, ๋งค ๋ผ์šด๋“œ๋งˆ๋‹ค ๊ณต๊ฒฉํ•ด์˜ค๋Š” ์ ์˜ ์ˆ˜๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๊ธด ์ •์ˆ˜ ๋ฐฐ์—ด enemy๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ค€ํ˜ธ๊ฐ€ ๋ช‡ ๋ผ์šด๋“œ๊นŒ์ง€ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • 1 โ‰ค n โ‰ค 1,000,000,000
  • 1 โ‰ค k โ‰ค 500,000
  • 1 โ‰ค enemy์˜ ๊ธธ์ด โ‰ค 1,000,000
  • 1 โ‰ค enemy[i] โ‰ค 1,000,000
  • enemy[i]์—๋Š” i + 1 ๋ผ์šด๋“œ์—์„œ ๊ณต๊ฒฉํ•ด์˜ค๋Š” ์ ์˜ ์ˆ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋ผ์šด๋“œ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” enemy[i]์˜ ๊ธธ์ด๋ฅผ return ํ•ด์ฃผ์„ธ์š”.

ํ’€์ด

๋ผ์šด๋“œ๋ณ„ enemy์˜ ์ˆ˜์˜ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•˜๋ฉด์„œ ๊ทธ ์ค‘ ์ƒ์œ„ ๊ฐ’ k๊ฐœ๋ฅผ ๋ฒกํ„ฐ์— ๋„ฃ๊ณ  ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ•ญ์ƒ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋ผ Min Heap ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

#include <vector>
#include <queue>

using namespace std;

int solution(int n, int k, vector<int> enemy) {
    int answer = 0;
    int totalRound = enemy.size();
    if(k>=totalRound) return totalRound;
    
    priority_queue<int, vector<int>, greater<int>> minHeap;
    
    int sum=0;
    int sumK=0;
    for(int i : enemy)
    {
        if(minHeap.size()<k)
        {
            minHeap.push(i);
            sumK += i;
        }
        else if(i>minHeap.top())
        {
            sumK -= minHeap.top();
            minHeap.pop();
            minHeap.push(i);
            sumK += i;
        }
        sum += i;
        if(sum-sumK>n)
        {
            break;
        }
        else
        {
            ++answer;
        }
    }
    
    return answer;
}

๐Ÿ’ก ๋А๋‚€ ์  (What I Felt)


์ถœ์ฒ˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค: ๋””ํŽœ์Šค ๊ฒŒ์ž„

0๊ฐœ์˜ ๋Œ“๊ธ€