๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/LeetCode

[LeetCode] 684. Redundant Connection (ํŒŒ์ด์ฌ/python)

by chjcoder 2023. 8. 10.

๐ŸŽˆ๋ฌธ์ œ

https://leetcode.com/problems/redundant-connection/

 

๐ŸŽ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜?

1. union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜ (์ƒ๊ฐํ–ˆ๋˜ ์ฝ”๋“œ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์•„ ๊ฒ€์ƒ‰ ํ›„ ์•Œ๊ฒŒ ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

-> ๊ฐ๊ฐ์˜ idx๋ฅผ ๋…ธ๋“œ๋ผ๊ณ  ์„ค์ •ํ–ˆ์„ ๋•Œ, ์—ฐ๊ฒฐ๋œ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž์˜ ๋…ธ๋“œ๋ฅผ idx์˜ ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

๐Ÿ’ป์ฝ”๋“œ

class Solution:
    def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:

            #  ๋ฐฉ๋ฌธ ํ‘œ์‹œ์™€ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๋™์‹œ์— ๊ธฐ๋กํ•  ๋ฆฌ์ŠคํŠธ
            par = [0] * (len(edges)+1)  

            def find(x):
                if par[x] == 0: # ์ฒ˜์Œ ๋ฐฉ๋ฌธ
                    return x
                return find(par[x]) # ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์žฌ๊ท€๋กœ ์ฐพ์•„ ์˜ฌ๋ผ๊ฐ

            for x, y in edges:
                u = find(x)
                v = find(y)
                if u == v:  # ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ๊ฐ™์œผ๋ฉด ์ˆœํ™˜ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ํ•ด๋‹น ๋…ธ๋“œ ๋ฐ˜ํ™˜
                    return [x, y]
                par[v] = u  # ์ž๊ธฐ ์ž์‹ ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๋ถ€๋ชจ๋กœ ์„ค์ •

๐ŸŽ„์ฝ”๋“œ ์„ค๋ช…

์ฃผ์„์œผ๋กœ ๋Œ€์ฒด

 

โŒ์‹คํŒจ ์‚ฌ๋ก€

๋‹จ์ˆœํžˆ ๋‘ ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ ์ ‘๊ทผํ•œ ์ ์ด ์žˆ์œผ๋ฉด return ํ•˜๊ฒŒ ํ–ˆ๋”๋‹ˆ 

edges = [[3,4],[1,2],[2,4],[3,5],[2,5]] ์ธ ๊ฒฝ์šฐ, ๋‹ต์€ [2,5]์ธ๋ฐ [2,4]๊ฐ€ ์ถœ๋ ฅ๋˜์–ด ์‹คํŒจ

class Solution:
    def findRedundantConnection(self, edges: List[List[int]]) -> List[int]:
            '''
            node_x์™€ node_y๋ฅผ ๊ฐ๊ฐ ๋น„๊ตํ•˜๋Š”๋ฐ ๋‘˜ ๋‹ค ์ด๋ฏธ visit์— ์žˆ์œผ๋ฉด return
            '''
            visit = [False for _ in range(1000)]
            for edge in edges:
                x,y = edge

                if visit[x]==True and visit[y]==True:
                    return edge
                visit[x] = True
                visit[y] = True