๋ฐฑ์ค€[node.js] > 1927๋ฒˆ ์ตœ์†Œ ํž™

2024. 12. 19. 00:25ยท๐Ÿ”’Algorithm

๋ฌธ์ œ๋งํฌ

https://www.acmicpc.net/problem/1927

 

๋ฌธ์ œํ’€์ด, ํ›„๊ธฐ

์ด ๋ฌธ์ œ๋Š” ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด์„œ ์ตœ์†Ÿ ๊ฐ’์„ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ตœ์ ํ™” ํ•˜๋ผ๋Š” ๋ฌธ์ œ๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Class๋ฅผ ์ด์šฉํ•ด์„œ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์—ฌ ํ’€์—ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ดˆ๋ฐ˜์—” ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋Š”๋ฐ ์•Œ๊ณ ๋ณด๋‹ˆ console.log๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ๋งค๋ฒˆ console.log๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ๋‹ต์„ ๊ตฌํ•œ ๋’ค ํ•œ๋ฒˆ์˜ console.log๋กœ ๋‹ต์„ ์ถœ๋ ฅํ•˜๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค console.log๊ฐ€ ์‹œ๊ฐ„์„ ๋จน๋Š”๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

heap ๊ตฌํ˜„์€ ๋Šฅ์ˆ™ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๊ณ  ํ•œ๋ฒˆ๋” heap์ž๋ฃŒ๊ตฌ์กฐ์™€ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ตœ์ ํ™” ํ•ด์ฃผ๋Š” ํŠธ๋ฆฌ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜์—ˆ๋‹ค. 

 

// https://www.acmicpc.net/problem/1927

// test case
// let data = "9\n0\n12345678\n1\n2\n0\n0\n0\n0\n32";
// let input = data
//     .toString()
//     .trim()
//     .split("\n")
//     .map((n) => Number(n));

let fs = require("fs");
let input = fs
    .readFileSync("/dev/stdin")
    .toString()
    .trim()
    .split("\n")
    .map((n) => Number(n));

class MinHeap {
    constructor() {
        this.heap = [];
    }

    insert(n) {
        let heap = this.heap;
        heap.push(n);
        if (heap.length >= 2) {
            let childIdx = heap.length - 1;
            let parentIdx = Math.floor((childIdx - 1) / 2);

            while (heap[parentIdx] > heap[childIdx]) {
                let [parent, child] = [heap[parentIdx], heap[childIdx]];

                heap[parentIdx] = child;
                heap[childIdx] = parent;

                childIdx = parentIdx;
                if (childIdx === 0) {
                    break;
                }
                parentIdx = Math.floor((childIdx - 1) / 2);
            }
        }
    }

    getMin() {
        let heap = this.heap;
        if (heap.length === 0) {
            return 0;
        }
        let min = heap[0];

        heap[0] = heap[heap.length - 1];
        heap.pop();

        if (heap.length > 1) {
            let parentIdx = 0;

            let childIdx = undefined;

            if (heap[parentIdx * 2 + 2] && heap[parentIdx * 2 + 1] > heap[parentIdx * 2 + 2]) {
                childIdx = parentIdx * 2 + 2;
            } else if (heap[parentIdx * 2 + 1]) {
                childIdx = parentIdx * 2 + 1;
            }

            while (heap[parentIdx] > heap[childIdx]) {
                let [parent, child] = [heap[parentIdx], heap[childIdx]];

                heap[parentIdx] = child;
                heap[childIdx] = parent;

                parentIdx = childIdx;

                if (heap[parentIdx * 2 + 2] && heap[parentIdx * 2 + 1] > heap[parentIdx * 2 + 2]) {
                    childIdx = parentIdx * 2 + 2;
                } else if (heap[parentIdx * 2 + 1]) {
                    childIdx = parentIdx * 2 + 1;
                } else {
                    break;
                }
            }
        }

        return min;
    }
}

let minHeap = new MinHeap();

let answer = [];
for (let i = 1; i < input.length; ++i) {
    let number = input[i];

    if (number === 0) {
        answer.push(minHeap.getMin());
    } else {
        minHeap.insert(number);
    }
}

console.log(answer.join("\n"));

'๐Ÿ”’Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€[node.js] > 2805๋ฒˆ ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ  (1) 2024.12.21
๋ฐฑ์ค€[node.js] > 2630๋ฒˆ ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ  (0) 2024.12.20
๋ฐฑ์ค€[node.js] > 21736๋ฒˆ ํ—Œ๋‚ด๊ธฐ๋Š” ์นœ๊ตฌ๊ฐ€ ํ•„์š”ํ•ด  (0) 2024.12.17
๋ฐฑ์ค€[node.js] > 15663๋ฒˆ N๊ณผ M (9)  (0) 2024.12.16
๋ฐฑ์ค€[node.js] > 11727๋ฒˆ 2xn ํƒ€์ผ๋ง 2  (0) 2024.12.15
'๐Ÿ”’Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€[node.js] > 2805๋ฒˆ ๋‚˜๋ฌด ์ž๋ฅด๊ธฐ
  • ๋ฐฑ์ค€[node.js] > 2630๋ฒˆ ์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ
  • ๋ฐฑ์ค€[node.js] > 21736๋ฒˆ ํ—Œ๋‚ด๊ธฐ๋Š” ์นœ๊ตฌ๊ฐ€ ํ•„์š”ํ•ด
  • ๋ฐฑ์ค€[node.js] > 15663๋ฒˆ N๊ณผ M (9)
devWarrior
devWarrior
  • devWarrior
    devWarrior
    devWarrior
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐ŸงฉDev (263)
      • โญFE (34)
      • ๐Ÿ”’Algorithm (155)
      • โž•Etc. (11)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
    • ๊ด€๋ฆฌ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ๋ฐฑ์ค€
    nodejs
    leetcode
    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    js
    ์‹ค๋ฒ„4
    ์‹ค๋ฒ„3
    BFS
    ๊ตฌํ˜„
    ์ฝ”ํ…Œ
    ๊ณจ๋“œ5
    node.js
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    javascript
    Algorithm
    ๊ทธ๋ฆฌ๋””
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    react
    DFS
    Easy
    Lv2
    ์˜ค๋ธ”์™„
    ์ž์Šค
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    dp
    ํ”„๋ก ํŠธ์—”๋“œ
    ์‹ค๋ฒ„2
    FE
    ์‹ค๋ฒ„1
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
devWarrior
๋ฐฑ์ค€[node.js] > 1927๋ฒˆ ์ตœ์†Œ ํž™
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”