Published:
Updated:


Solution

import collections
from typing import List


class Solution:
    # ์™ธ๊ณฝ ๋…ธ๋“œ -> ํ•œ ๊ฐœ์˜ ์ด์›ƒ๋งŒ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ, ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋…ธ๋“œ๋“ค ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Œ
    # BFS๋กœ ํƒ์ƒ‰ -> ์‹œ์ž‘ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ํ์— ์ถ”๊ฐ€ํ•˜๊ณ , ํ์—์„œ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์–ด ํƒ์ƒ‰
    # ์ตœ์†Œ ๋†’์ด ํƒ์ƒ‰ ๋ฐฉ๋ฒ• -> ์™ธ๊ณฝ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋…ธ๋“œ๋“ค์„ ํƒ์ƒ‰, ๋ชจ๋“  ์™ธ๊ณฝ ๋…ธ๋“œ๊ฐ€ ํ์—์„œ ์ œ๊ฑฐ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    def findMinHeightTrees(self, n: int, edges: List[List[int]]) -> List[int]:
        # ๊ทธ๋ž˜ํ”„์— ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ
        if n == 1:
            return [0]

        graph = collections.defaultdict(set)

        # ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ(graph) ์ƒ์„ฑ
        for x, y in edges:
            graph[x].add(y)
            graph[y].add(x)

        # ์™ธ๊ณฝ ๋…ธ๋“œ(outsides) ๊ตฌํ•˜๊ธฐ
        outsides = []
        for node in graph:
            if len(graph[node]) == 1:
                outsides.append(node)

        while n > 2:  # ๋…ธ๋“œ๊ฐ€ 2 ์ดํ•˜๊ฐ€ ๋  ๋•Œ ์ค‘๋‹จ
            # ํ˜„์žฌ ์™ธ๊ณฝ ๋…ธ๋“œ์˜ ์ˆ˜๋ฅผ ๋นผ์คŒ์œผ๋กœ์จ ๋…ธ๋“œ์˜ ์ˆ˜ ์—…๋ฐ์ดํŠธ
            n -= len(outsides)

            # ๋‹ค์Œ ๋‹จ๊ณ„์˜ ์™ธ๊ณฝ ๋…ธ๋“œ๋ฅผ ๋‹ด๋Š” ๋ฆฌ์ŠคํŠธ
            new_outsides = []

            for outside in outsides:
                # ํ˜„์žฌ ์™ธ๊ณฝ ๋…ธ๋“œ์˜ ์ด์›ƒ ๋…ธ๋“œ
                # pop(): ์ด์›ƒ ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒ ํ›„ -> ๊ทธ ๋…ธ๋“œ๋ฅผ ์ด์™ธ์˜ ์ด์›ƒ๋“ค๊ณผ์˜ ์—ฐ๊ฒฐ์„ ๋Š์Œ
                outside_neighbor = graph[outside].pop()

                # ์ด์›ƒ ๋…ธ๋“œ์™€์˜ ์—ฐ๊ฒฐ์„ ๋Š์–ด์คŒ -> ์ด๋ฅผ ํ†ตํ•ด ์™ธ๊ณฝ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๊ฒŒ ์ œ๊ฑฐ๋จ
                graph[outside_neighbor].remove(outside)

                # ์™ธ๊ณฝ ๋…ธ๋“œ์ธ ๊ฒฝ์šฐ
                if len(graph[outside_neighbor]) == 1:
                    # ๋‹ค์Œ ๋‹จ๊ณ„์˜ ์™ธ๊ณฝ ๋…ธ๋“œ์— ๋‹ด์Œ
                    new_outsides.append(outside_neighbor)

                outsides = new_outsides

        return outsides

Leave a comment