๐ŸŒณ ์ดˆ๋ณด์ž์šฉ ๊ฐ€์ด๋“œ 'Root To Leaf Binary Numbers์˜ ํ•ฉ' - Problem 1022 (C++, Python, JavaScript)

๋ฐœํ–‰: (2026๋…„ 2์›” 24์ผ ์˜ค์ „ 10:45 GMT+9)
5 ๋ถ„ ์†Œ์š”
์›๋ฌธ: Dev.to

Source: Dev.to

๋ฌธ์ œ ๊ฐœ์š”

์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ํ•ต์‹ฌ์ด๋ฉฐ, ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ์—์„œ๋Š” ๋ฃจํŠธ์—์„œ ๋ฆฌํ”„๊นŒ์ง€์˜ ๊ฐ ๊ฒฝ๋กœ๊ฐ€ ํ•˜๋‚˜์˜ ์ด์ง„์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ด๋Ÿฌํ•œ ์ด์ง„์ˆ˜์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

์ ‘๊ทผ ๋ฐฉ๋ฒ•

ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ด์ง„์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค:

  • ํ•œ ๋ ˆ๋ฒจ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐˆ ๋•Œ ํ˜„์žฌ ๊ฐ’์„ ์™ผ์ชฝ์œผ๋กœ ํ•œ ๋น„ํŠธ ์ด๋™(โ€ฏ*2โ€ฏ)ํ•˜๊ณ  ๋…ธ๋“œ์˜ ๋น„ํŠธ๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค.
  • ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)์„ ์‚ฌ์šฉํ•ด ๊ฐ ๊ฐ€์ง€๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • โ€œํ˜„์žฌ ๊ฐ’โ€์„ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌํ”„ ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๋ฉด ๋ˆ„์ ๋œ ๊ฐ’์„ ์ „์ฒด ํ•ฉ์— ๋”ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ฐœ๋…

  • ์ „์œ„ ์ˆœํšŒ(Preโ€‘order Traversal) โ€“ ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์ž์‹๋ณด๋‹ค ๋จผ์ € ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๋ˆ„์‚ฐ๊ธฐ ํŒจํ„ด(Accumulator Pattern) โ€“ ํ˜„์žฌ ๊ฒฝ๋กœ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•ด ์ „์—ญ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋น„ํŠธ ์—ฐ์‚ฐ(Bit Manipulation) โ€“ val = (val * 2) + bit ์€ ๋น„ํŠธ ์‹œํ€€์Šค๋ฅผ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

๋ฃจํŠธ๊ฐ€ 1์ด๊ณ  ๋ฆฌํ”„๊ฐ€ ๋งŒ๋“œ๋Š” ๊ฒฝ๋กœ๊ฐ€ (1,0,0), (1,0,1), (1,1,0), (1,1,1) ์ธ ํŠธ๋ฆฌ๋ฅผ ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค.

  1. ๋ฃจํŠธ(1)์—์„œ ์‹œ์ž‘: ํ˜„์žฌ ๊ฐ’ =โ€ฏ1.
  2. ์™ผ์ชฝ ์ž์‹(0)์œผ๋กœ ์ด๋™: 1โ€ฏร—โ€ฏ2โ€ฏ+โ€ฏ0 = 2.
  3. ์™ผ์ชฝ ๋ฆฌํ”„(0): 2โ€ฏร—โ€ฏ2โ€ฏ+โ€ฏ0 = 4 โ†’ 4๋ฅผ ๋”ํ•จ.
  4. ์˜ค๋ฅธ์ชฝ ๋ฆฌํ”„(1): 2โ€ฏร—โ€ฏ2โ€ฏ+โ€ฏ1 = 5 โ†’ 5๋ฅผ ๋”ํ•จ.
  5. ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ง„ํ–‰ โ†’ ๊ฐ’์€โ€ฏ6๊ณผโ€ฏ7.

์ „์ฒด ํ•ฉ =โ€ฏ4โ€ฏ+โ€ฏ5โ€ฏ+โ€ฏ6โ€ฏ+โ€ฏ7 = 22.

C++ ํ’€์ด

class Solution {
public:
    int sumRootToLeaf(TreeNode* root) {
        int totalSum = 0;
        dfs(root, 0, totalSum);
        return totalSum;
    }

private:
    void dfs(TreeNode* node, int currentVal, int& totalSum) {
        if (node == nullptr) return;

        // Shift left (multiply by 2) and add the current node's bit
        currentVal = currentVal * 2 + node->val;

        // If it's a leaf node, add the accumulated value to the total
        if (node->left == nullptr && node->right == nullptr) {
            totalSum += currentVal;
            return;
        }

        dfs(node->left, currentVal, totalSum);
        dfs(node->right, currentVal, totalSum);
    }
};

Python ํ’€์ด

class Solution:
    def sumRootToLeaf(self, root: Optional[TreeNode]) -> int:
        self.total_sum = 0

        def dfs(node, current_val):
            if not node:
                return

            # Binary shift logic: current_val * 2 is equivalent to current_val  {
        if (!node) return;

        // Build the number as we descend
        currentVal = (currentVal * 2) + node.val;

        // If both children are null, we are at a leaf
        if (!node.left && !node.right) {
            totalSum += currentVal;
            return;
        }

        dfs(node.left, currentVal);
        dfs(node.right, currentVal);
    };

    dfs(root, 0);
    return totalSum;
};

์™œ ์ด ๋ฌธ์ œ๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€

์ด โ€œEasyโ€ ๋“ฑ๊ธ‰ ๋ฌธ์ œ๋Š” ๊ธฐ์ˆ  ๋ฉด์ ‘์—์„œ ์ธ๊ธฐ๊ฐ€ ๋†’์€๋ฐ, ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋ฅผ ๋™์‹œ์— ํ‰๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค:

  • ํŠธ๋ฆฌ ์žฌ๊ท€(DFS) ๊ตฌํ˜„ ๋Šฅ๋ ฅ.
  • ์ด์ง„์ˆ˜ ๊ตฌ์„ฑ ๋ฐ ๋น„ํŠธ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์ดํ•ด.

์œ ์‚ฌํ•œ ๋กœ์ง์€ ๋ฐ์ดํ„ฐ ์••์ถ•์„ ์œ„ํ•œ ํ—ˆํ”„๋งŒ ์ฝ”๋”ฉ์ด๋‚˜ IP ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”(ํŠธ๋ผ์ด)๊ณผ ๊ฐ™์ด ์ด์ง„ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์ €์žฅํ•ด ๋น ๋ฅด๊ฒŒ ์กฐํšŒํ•˜๋Š” ์‹ค์ œ ์‹œ์Šคํ…œ์—์„œ๋„ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์„ ๋งˆ์Šคํ„ฐํ•˜๋ฉด ๋ณด๋‹ค ๋ณต์žกํ•œ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ณผ์ œ์— ๋Œ€ํ•œ ํƒ„ํƒ„ํ•œ ๊ธฐ๋ฐ˜์„ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

0 ์กฐํšŒ
Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

Show HN: SNKV โ€“ SQLite์˜ B-ํŠธ๋ฆฌ๋ฅผ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๋กœ ํ™œ์šฉ (C/C++ ๋ฐ Python ๋ฐ”์ธ๋”ฉ)

SQLite๋Š” ์—ฌ์„ฏ ๊ฐœ์˜ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค: SQL parser โ†’ query planner โ†’ VDBE โ†’ B-tree โ†’ pager โ†’ OS (SQLite architecture https://sqlite.org/arch.html). ํ‚คโ€‘๊ฐ’ ์›Œํฌ๋กœ๋“œ์˜ ๊ฒฝ์šฐ ๋‹น์‹ ์€ ์˜ค์งโ€ฆ

Serializers & DTOs: API๊ฐ€ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ์ œ์–ดํ•˜๊ธฐ

DTO๋ž€ ๋ฌด์—‡์ธ๊ฐ€? DTO(Data Transfer Object)๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋…ธ์ถœ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ™•ํžˆ ์ •์˜ํ•˜์—ฌ ๋‚ด๋ถ€ ํ•„๋“œ๊ฐ€ ์œ ์ถœ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ์˜ˆ์‹œ ๋ชจ๋ธ ๊ณ ๋ ค...

Umbraco ํ…Œ์ŠคํŠธ ์˜ˆ์ œ, ์ด์ œ Umbraco 17์—์„œ๋„

Umbraco 17 ์ž๋™ํ™” ํ…Œ์ŠคํŠธ ์„ค์ • ์ด ํ”„๋กœ์ ํŠธ๋Š” Umbraco 17์„ ์‚ฌ์šฉํ•œ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์™„์ „ํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ์šฉ์ด๋‚˜ ์‹œ์ž‘์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript์—์„œ ๋ณ€์ˆ˜์™€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ดํ•ดํ•˜๊ธฐ

์†Œ๊ฐœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์ฝ”๋“œ๋ฅผ ๋ฐฐ์šฐ๊ณ  ์žˆ๋‹ค๋ฉด variables๋ฅผ ๋งˆ์Šคํ„ฐํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ํ•œ ์ง‘์—์„œ ๋‹ค๋ฅธ ์ง‘์œผ๋กœ ์ด์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”. ๋‹น์‹ ...