Skip to content

Heap.md ์‚ญ์ œ ์˜ˆ์ œ ์ฝ”๋“œ ์˜ค๋ฅ˜ย #207

@boulce

Description

@boulce
int delete_max_heap() {
    
    if(heapSize == 0) // ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์œผ๋ฉด ๋ฆฌํ„ด
        return 0;
    
    int item = maxHeap[1]; // ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฐ’์„ ์ €์žฅ
    maxHeap[1] = maxHeap[heapSize]; // ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ๊ฐ’์„ ๋ฃจํŠธ๋กœ ์ด๋™
    maxHeap[heapSize--] = 0; // ํž™ ํฌ๊ธฐ๋ฅผ ํ•˜๋‚˜ ์ค„์ด๊ณ  ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ 0 ์ดˆ๊ธฐํ™”
    
    for(int i = 1; i*2 <= heapSize;) {
        
        // ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ ๋…ธ๋“œ์™€ ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๋ณด๋‹ค ํฌ๋ฉด ๋
        if(maxHeap[i] > maxHeap[i*2] && maxHeap[i] > maxHeap[i*2+1]) {
            break;
        }
        
        // ์™ผ์ชฝ ๋…ธ๋“œ๊ฐ€ ๋” ํฐ ๊ฒฝ์šฐ, swap
        else if (maxHeap[i*2] > maxHeap[i*2+1]) {
            swap(i, i*2);
            i = i*2;
        }
        
        // ์˜ค๋ฅธ์ชฝ ๋…ธ๋“œ๊ฐ€ ๋” ํฐ ๊ฒฝ์šฐ
        else {
            swap(i, i*2+1);
            i = i*2+1;
        }
    }
    
    return item;
    
}

"i2+1" ์ด heapSize ๋ฒ”์œ„ ์•ˆ์— ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ฒดํฌ๊ฐ€ ์—†์–ด์„œ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. for ๋ฌธ์—์„œ i2 <= heapSize๋งŒ ์ฒดํฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, i2๊ฐ€ heapSize์ผ๋•Œ, i2+1์ด heapSize๋ฅผ ๋ฒ—์–ด๋‚˜์„œ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐฐ์—ด์˜ ๊ฐ’๊ณผ ๋น„๊ตํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ˆ˜์ •์ด ํ•„์š”ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions