[김태원 알고리즘] 아나그램 (딕셔너리 해쉬)
사용 언어: Python3
문제
풀이
내 풀이
w1, w2 = input(), input()
# ✅ 딕셔너리 초기화
dic1 = {x:0 for x in w1}
dic2 = {x:0 for x in w2}
for x in w1:
dic1[x] += 1
for x in w2:
dic2[x] += 1
if sorted(dic1.items()) == sorted(dic2.items()):
print('YES')
else:
print('NO')
dic1
을 이용해 첫 번째 단어를 구성하는 알파벳의 수를 카운트 한다.dic2
를 이용해 두 번째 단어를 구성하는 알파벳의 수를 카운트 한다.dic1
과dic2
를 정렬한 뒤 같으면YES
, 다르면NO
출력
다른 풀이
딕셔너리 초기화 하는 부분을 수정하고 get()
함수를 통해 키가 없을 때 default 값을 지정했다.
w1, w2 = input(), input()
# 딕셔너리 초기화
dic1, dic2 = dict(), dict()
for x in w1:
dic1[x] = dic1.get(x,0) + 1 # ✅ x라는 키가 없으면 0으로 default값 지정
for x in w2:
dic2[x] = dic2.get(x,0) + 1
if sorted(dic1.items()) == sorted(dic2.items()):
print('YES')
else:
print('NO')
다른 풀이
w1, w2 = input(), input()
dic = dict()
for x in w1: # ✅ 카운트
dic[x] = dic.get(x,0) + 1
for x in w2: # ✅ 원상복귀
dic[x] = dic.get(x,0) - 1
if all(x == 0 for x in dic.values()):
print('YES')
else:
print('NO')
- 딕셔너리를 하나만 사용하는 방법이다.
w1
을 순회하며dic
을 이용해 카운트 하고, 이어서w2
를 순회하며dic
을 원상복귀 시킨다.w1
과w2
의 순회를 모두 마쳤을 때dic
의 value들은 모두 0이어야 아나그램이다.
💛 개인 공부 기록용 블로그입니다. 👻