우선 "아나그램"의 정의는 하나의 문자열의 순서를 바꾸어서 새로 만들어진 문자열을 의미한다.
따라서 t라는 문자열에 있는 요소들로 s를 만들 수 있는지 물어본다.
여기서는 두개의 문자열의 요소가 일치하는지만 확인하면 된다.
이를 가장 빨리 확인할 수 있는 방법이 딕셔너리를 활용하는 방법인데,
단순하게 딕셔너리를 개별적으로 (s에 관한 딕셔너리 만드는 for문 하나, t에 관한 딕셔너리 만드는 for문 하나) 만들어도 되지만
단순하게 여러번 만드는것은 크게 의미가 없으니까, 파이썬 내장함수인 "defaultdict"에 관해 배워 보겠다.
h = {}
for chr in s:
if chr in h:
h[chr] += 1
else:
h[chr] = 0
이게 우리가 알고 있는 일반적으로 문자열을 딕셔너리로 만드는 방법이다.
이를 간략하게 해주는 녀석이 있는데, 이는 파이썬에 있는 컬렉션(collections)이라는 녀석이 가지고 있다.
from collections import defaultdict
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
counter_1 = defaultdict(int)
counter_2 = defaultdict(int)
for c in s:
counter_1[c] += 1
for c in t:
counter_2[c] += 1
return counter_1 == counter_2
이게 이번 문제의 해답인데, 리트코드에서는 맨 윗줄(from collections import defaultdict)이 없어도 작동하지만,
다른 곳에서 실행하기 위해서는 import(불러오기)를 해줘야 한다.
여기에 있는 defaultdict(안에 저장할 내용의 타입)을 사용하면, 없는 기존에 있는 if else 문에 있는 것을 한번에 "알아서"해주는 역할을 한다.
크게 어려운 것은 아니나, 그다지 실무에서는 자주 사용하는 것이 아니기에(왜냐하면 실무는 딕셔너리에 훨씬 많은 정보를 담고 그때 그때 입맛에 따라 다르게 정보를 저장하기 때문), 기억은 잘 못하지만, 코딩테스트를 할것이면 collections에 대해 알아두는게 좋다.
뒤로 갈수록 dictionary를 활용하는 문제를 collections으로 풀이를 하는 사람들이 많아지기 때문이다.
'리트코드 알고리즘 > 리트코드 easy' 카테고리의 다른 글
(간단한 코드)리트코드 169. Majority Element (0) | 2024.12.15 |
---|---|
(간단한 코드)리트코드 1189. Maximum Number of Balloons (0) | 2024.12.13 |
(간단한 코드)리트코드 383. Ransom Note (0) | 2024.12.12 |
(간단한 코드)리트코드 217. Contains Duplicate (0) | 2024.12.12 |
(간단한 코드)리트코드 771. Jewels and Stones (0) | 2024.12.12 |