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

[LeetCode] 1061. Lexicographically Smallest Equivalent String (ํŒŒ์ด์ฌ/python)

by chjcoder 2023. 8. 10.

๐ŸŽˆ๋ฌธ์ œ

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)

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

์ฃผ์„์œผ๋กœ ๋Œ€์ฒด ํ•œ๋‹ค.