๐๋ฌธ์
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