๐ ๋ชฉ์ฐจ
๐ค ๋ฌธ์ : Group Anagrams | LeetCode 778
๋ฌธ์ : https://leetcode.com/explore/interview/card/top-interview-questions-medium/103/array-and-strings/778/
๋ฌธ์์ด์ ๋ฆฌ์คํธ๊ฐ ์ฃผ์ด์ก์๋, ๊ฐ์ ๋ฌธ์ ๊ตฌ์ฑ์ผ๋ก ์์๋ง ๋ฐ๋ ๋ฌธ์์ด์ ๋ฌถ์ด์ ๋ฐํํ๋ ๋ฌธ์ ์
๋๋ค.
์๋ฅผ๋ค์ด abc, acb, bac, bca, cab, cba๊ฐ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ ๋๋ค.
๐ก ํ์ด
1. ์ ๊ทผ - '๊ฐ์ ๋ฌธ์๋ค๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด'์์ ์ด๋ป๊ฒ ํ๋จํ ๊น?
์ด ๋ฌธ์ ์ ํต์ฌ์ ๊ฐ์ ๋ฌธ์๋ค๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์์ ์ด๋ป๊ฒ ํ๋จํ ์ง์ ๋๋ค.
๊ฐ์ ๋ฌธ์๋ค๋ก ๊ตฌ์ฑ๋ ๋ฌธ์์ด์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ์ ํ๋จํ๋ฉด ๋๊ฒ ์ฃ .
์ ๋ ๋ฌธ์์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค.
2. ํ์ด
from typing import List
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
sorted_string_set = {}
grouped_str_list = []
targetIndex = 0
for s in strs:
sorted_str = str(sorted(s))
if sorted_str in sorted_string_set:
grouped_str_list[ sorted_string_set[ sorted_str ] ].append(s)
else:
sorted_string_set[ sorted_str ] = targetIndex
targetIndex += 1
grouped_str_list.append([s])
return grouped_str_list
print(Solution().groupAnagrams(["eat","tea","tan","ate","nat","bat"]))
Time Complexity
๋ฌธ์์ด ์ ๋ ฌ : O(klogk), k๋ ๋ฌธ์์ด ๊ธธ์ด
set์์ ๋ฌธ์์ด ํ์ : O(1)
Space Complexity
์ ๋ ฌ๋ ๋ฌธ์์ด๋ง set์ ์ค๋ณต์์ด ์ ์ฅํฉ๋๋ค.
์ต์ ์ ๊ฒฝ์ฐ O(n)์ด๊ฒ ๋ค์. (๋ชจ๋ ๋ฌธ์์ด์ด anagram์ด ์๋ ๊ฒฝ์ฐ)
3. ์๋ฃ๊ตฌ์กฐ ๋ฐ ํจ์ ์ ํ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์ ์ฐจ์ด
์ฒ์์๋ ๋ก์ง์ ๊ฑฐ์ ๋์ผํ๋๋ฐ, ์ํ์๊ฐ์ด ๊ฑฐ์ 9๋ฐฐ๋ ํฌ๊ฒ ๋์์ต๋๋ค.
๋ค๋ฅธ์ ์ ์๋ ๋๊ฐ์ง์ ๋๋ค.
1. sorted_string_list -> set (906ms -> 173ms)
2. ''.join(sorted(str)) -> str(sorted(s)) (173ms -> 112ms)
์๋๋ ์ฒ์ ์ ์ถํ ์ฝ๋์ ์ฑ๋ฅ์ ๋๋ค.
from typing import List
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
sorted_string_set = []
grouped_str_list = []
targetIndex = 0
for str in strs:
sorted_str = ''.join(sorted(str))
group_id = sorted_string_set.index(sorted_str) if sorted_str in sorted_string_set else -1
if group_id < 0 :
group_id = targetIndex
targetIndex += 1
sorted_string_set.append(sorted_str)
grouped_str_list.append([str])
else:
grouped_str_list[group_id].append(str)
# print(sorted_string_set)
# print(grouped_str_list)
return grouped_str_list
python์์ set๊ณผ dictionary๋ Hashmap ๊ธฐ๋ฐ์ด๊ธฐ์ insert์ O(1)๋ฐ์ ๊ฑธ๋ฆฌ์ง ์์ต๋๋ค.
๋ฐ๋ฉด ๋ฆฌ์คํธ์์์ time complexity๋ O(n) ์ ๋๋ค.
์ฐธ๊ณ ) ํ์ด์ฌ ๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ์ time complexity
https://wiki.python.org/moin/TimeComplexity