Leetcode) Group Anagrams

Duna·2021년 8월 22일
0
post-thumbnail

Top Interview Questions
Medium Collection

Link of Problem

LEVEL : 🌕 🌕 🌕 🌑 🌑 (중)


Anagrams, 단어나 문장을 구성하고 있는 문자의 순서를 바꾸어 다른 단어나 문장을 만드는 놀이 라고 합니다.
이름 그대로 Character의 순서만 바뀌면 같은 단어가 되는 element들끼리 묶는 문제였어요.

저는 어떻게 접근해야할지도 모르겠고, 도저히 감이 잡히지 않아서 Solution에 또 손을 댔습니다...🥲
정말로 모르겠더라구요...🥲

또 새로운 방법을 얻어갑니다.

Solution

제 생각보다 너무너무너무너무 x 100 간단했던 방식이었습니다.

정말 짧지 않나요?
제가 머릿속으로 그리고 처음에 짰던 코드가 미완성인 상태라도 저것보다 길었는데... 자괴감이 드네요.

func groupAnagrams(_ strs: [String]) -> [[String]] {
    guard strs.count > 1 else { return [strs] }
    
    var map = [String: [String]]()
    
    for str in strs {
        let key = String(str.sorted())
        map[key, default: []].append(str)
    }
    
    return Array(map.values)
}

이 코드는 Dictionary를 특이하게 사용했습니다.
[String: [String]] : key를 String으로 value를 String 배열로 잡았어요.

요 부분만 보고는 저도 어떻게 할 생각인가 싶었는데, 밑에 for문을 보게 되면 str를 하나씩 가져오면서 key값을 sorted로 일정하게 만듭니다.
한 마디로 eatate 모두 sorted된 상태가 aet이기 때문에 두 개 모두 key값을 aet로 가지게 되는거죠. 그렇기 때문에 anagrams로 인식이 되어서 같은 value로 들어갑니다.

제가 생각한 것보다 훨씬 쉽게 풀리던거였습니다...🥲
하지만 저렇게 Dictionary를 쓸 수 있다는 것, Dictionary에서의 default사용을 할 수 있다는 것, 이런걸 처음 알았네요.. 다음부터는 풀이에 사용해봐야겠습니다.

profile
더 멋진 iOS 개발자를 향해

0개의 댓글