LeetCode Lexicographically Smallest Equivalent String 문제, Union-Find (Disjoint Set Union)로 해결하기
🤖 AI 추천
이 콘텐츠는 LeetCode의 문자열 조작 및 그래프 문제를 Union-Find (Disjoint Set Union) 자료구조를 사용하여 효율적으로 해결하는 방법을 배우고 싶은 모든 레벨의 개발자에게 유용합니다. 특히 알고리즘 문제 해결 능력을 향상시키고자 하는 주니어 개발자나 Union-Find 자료구조의 실질적인 적용 사례를 찾고 있는 개발자에게 추천합니다.
🔖 주요 키워드

핵심 기술
이 콘텐츠는 LeetCode의 "Lexicographically Smallest Equivalent String" 문제를 Union-Find (Disjoint Set Union) 자료구조를 활용하여 효율적으로 해결하는 방법을 상세히 설명합니다. 문자열 기반의 동치 관계를 그래프로 모델링하고, 이를 통해 각 문자의 가장 작은 동치 문자를 찾는 것이 핵심입니다.
기술적 세부사항
- 문제 정의: 두 개의 동일한 길이 문자열
s1
,s2
와 기준 문자열baseStr
이 주어집니다.s1[i]
와s2[i]
는 해당 문자들이 서로 동치임을 나타내며, 이 동치 관계는 반사성(Reflexive), 대칭성(Symmetric), 추이성(Transitive)을 만족합니다.baseStr
의 각 문자를 이 동치 관계에 따라 가장 작은 동치 문자로 변환해야 합니다. - 접근 방식: 각 문자를 그래프의 노드로 간주하고,
(s1[i], s2[i])
쌍을 간선으로 연결합니다. 연결된 모든 문자는 같은 동치 집합에 속하게 되며, 해당 집합 내에서 가장 작은 문자로 대표됩니다. - Union-Find (Disjoint Set Union):
- Find 연산: 특정 문자가 속한 동치 집합의 대표(루트)를 찾는 기능입니다. 경로 압축(Path Compression) 최적화를 사용하여 효율성을 높입니다.
- Union 연산: 두 문자를 같은 동치 집합으로 연결합니다. 이때, 항상 사전적으로 더 작은 문자를 부모로 삼는(Union by Lexicographical Order) 방식으로 연결하여, 각 집합의 루트가 항상 해당 집합의 가장 작은 문자가 되도록 합니다.
- 구현: C++, JavaScript, Python 세 가지 언어로 DSU 클래스 및
smallestEquivalentString
함수 구현 예시를 제공합니다.- 각 문자는
'a'
를 기준으로 0부터 25까지의 정수로 매핑됩니다. s1
과s2
를 순회하며unionByLex
(또는union
) 연산을 수행하여 동치 집합을 구성합니다.baseStr
을 순회하며 각 문자의 대표를 찾고, 이를baseStr
의 해당 문자로 대체하여 최종 결과를 생성합니다.
- 각 문자는
- 시간 복잡도:
O(n + m)
, 여기서n
은s1
과s2
의 길이,m
은baseStr
의 길이입니다. (Find 및 Union 연산이 거의 상수 시간에 수행됨) - 공간 복잡도:
O(1)
(알파벳 26개의 정보를 저장하므로 고정된 공간 사용)
개발 임팩트
이 문제는 Union-Find 자료구조의 기본 개념과 실제 적용 사례를 명확하게 보여줍니다. 알고리즘 문제 해결 능력을 향상시키는 데 큰 도움이 되며, 문자열 및 그래프 관련 문제에 대한 이해도를 높일 수 있습니다. 특히 코딩 테스트를 준비하는 개발자들에게 매우 실용적인 학습 자료가 됩니다.
커뮤니티 반응
해당 문제는 LeetCode에서 많이 다루어지는 대표적인 Union-Find 활용 사례 중 하나로, 많은 개발자들이 효율적인 알고리즘 구현에 대한 토론과 최적화 방법을 공유하고 있습니다. "fun string manipulation and graph problem"으로 소개되며, Union-Find의 강력함을 입증하는 사례로 언급됩니다.