๐๋ฌธ์
https://leetcode.com/problems/lexicographically-smallest-equivalent-string/description/
๐์ด๋ค ์๊ณ ๋ฆฌ์ฆ?
1. union-find ์๊ณ ๋ฆฌ์ฆ
-> ๋ ๋ฒ์งธ ํ์ด๋ณด๋ union-find๋ฌธ์ . ์ด์ ์๋ ๋ฆฌ์คํธ์ idx์ ๊ฐ์ ์ ์ฅํ์ฌ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ฐพ์์คฌ๋๋ฐ, ์ด๋ฒ ๋ฌธ์ ์์๋ ์ซ์๊ฐ ์๋ str()์ด์ฌ์ ๋ฆฌ์คํธ์ 65๋ฒ์งธ idx๋ถํฐ ํ์ฉํด์ผํ๋ ๊ณ ๋ฏผํ์ง๋ง ๊ฒ์์ ์กฐ๊ธ ํด๋ณด๋ dict๋ฅผ ํ์ฉํ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์๋ค.
๐ป์ฝ๋
class Solution:
def smallestEquivalentString(self, s1: str, s2: str, baseStr: str) -> str:
def find(x):
if x not in parent: # ์ฒ์ ๋ง๋๋ ๋
ธ๋๋
parent[x] = x # ์๊ธฐ ์์ ์ ๋ถ๋ชจ๋ก ์ค์
while x != parent[x]: # ์ต์๋จ์ ๋ถ๋ชจ๋ฅผ ์ฐพ์ ๋๊น์ง ํ์ ๋ฐ๋ณต
x = parent[x]
return x # ์ต์๋จ์ ๋ถ๋ชจ return
def union(a,b):
ra = find(a) # a์ ๋ถ๋ชจ ๋
ธ๋ ์ฐพ๊ธฐ
rb = find(b) # b์ ๋ถ๋ชจ ๋
ธ๋ ์ฐพ๊ธฐ
parent[ra] = parent[rb] = min(ra,rb) #์์ ๊ฐ์ ๋ถ๋ชจ ๋
ธ๋๋ก
parent = {}
# union ํจ์๋ก ๊ฐ element๋ณ๋ก ๋ถ๋ชจ ๋
ธ๋ ์ฐพ๊ธฐ
for c1,c2 in zip(s1,s2):
union(c1,c2)
# baseStr์ ๊ฐ element๋ฅผ ๋ถ๋ชจ ๋
ธ๋๋ก ๋์ฒด
result = []
for c in baseStr:
result.append(parent[find(c)])
return ''.join(result)
๐์ฝ๋ ์ค๋ช
์ฃผ์์ผ๋ก ๋์ฒด ํ๋ค.
'Algorithm > LeetCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 22. Generate Parentheses (ํ์ด์ฌ/python) (0) | 2023.09.01 |
---|---|
[LeetCode] 1395. Count Number of Teams (ํ์ด์ฌ/python) (0) | 2023.08.12 |
[LeetCode] 684. Redundant Connection (ํ์ด์ฌ/python) (0) | 2023.08.10 |
[LeetCode] 863. All Nodes Distance K in Binary Tree (ํ์ด์ฌ/python) (0) | 2023.08.08 |
[LeetCode] 802. Find Eventual Safe States (ํ์ด์ฌ/python) (0) | 2023.08.07 |