[Leetcode/Medium] 그룹 애너그램 (49. Group Anagrams, Swift)
2024. 6. 30. 10:12ㆍAlgorithm
https://leetcode.com/problems/group-anagrams/description/
🤔 문제 설명
문자열 배열이 주어지면, 애너그램 단위로 그룹화하세요.
애너그램(Anagram)이란 다른 단어나 구문의 글자를 재정렬하여 다른 뜻을 가진 단어로 바꾸는 것을 뜻합니다.
(예시: '문전박대' -> '대박전문')
strs = ["eat","tea","tan","ate","nat","bat"]
// [["bat"],["nat","tan"],["ate","eat","tea"]]
💡 풀이
입력으로 들어온 String Array를 반복하면서 해당 단어랑 같은 애너그램 단위로 그룹화할 수 있는 단어를 찾는 것이 이 문제의 핵심이었다.
이때 단어를 sorted해주게 되면, 같은 애너그램 단위에서 나올 수 있는 단어가 같아 Key 값으로 처리해줄 수 있을 것이라 생각했고,
그 Key값에 대해 같은 애너그램 단위로 딕셔너리 Value를 Array를 묶어 판별해줄 수 있었다.
반복이 끝났을 때, 해당 딕셔너리에 대해 value값만 return하면 최종적으로 원하는 값을 꺼낼 수 있었다!
🧑🏻💻 코드 (Swift ver.)
class Solution {
func groupAnagrams(_ strs: [String]) -> [[String]] {
var anagrams = [String: [String]]() // Anagram을 판단하기 위한 딕셔너리
for str in strs {
let sortedStr = String(str.sorted()) // 정렬된 단어를 Key값으로 가짐 -> 애너그램 단어는 정렬해도 단어가 같음
if var anagram = anagrams[sortedStr] { // 딕셔너리에 key 값이 있는 경우 -> 기존 Value에 append한 후, 갈아 끼우기
anagram.append(str)
anagrams[sortedStr] = anagram
} else { // 딕셔너리에 key 값이 없는 경우 -> Key 값에 해당하는 새로운 Array 추가
anagrams[sortedStr] = [str]
}
}
return Array(anagrams.values)
}
}
'Algorithm' 카테고리의 다른 글
[Leetcode/Medium] 가장 긴 팰린드롬 부분 문자열 (5. Longest Palindrome Substring, Swift) (0) | 2024.07.02 |
---|---|
[Leetcode/Easy] 두 수의 합 (1. Two Sum, Swift) (1) | 2024.07.01 |
[Leetcode/Easy] 가장 흔한 단어 (819. Most Common Word, Swift) (0) | 2024.06.29 |
[Leetcode/Medium] 로그 파일 재정렬 (937. Reorder Log Files, Swift) (0) | 2024.06.29 |
[Leetcode/Easy] 문자열 뒤집기 (344. Reverse String, Swift) (0) | 2024.06.28 |