알고리즘 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.
문제
[아나그램(딕셔너리 해쉬)]
Anagram은 두 문자열이 알파벳의 나열 순서만 다를 뿐, 그 구성이 일치하는 것을 뜻한다.
예를 들면, AbaAeCe와 baeeACA는 알파벳의 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치한다. 즉, 어느 한 단어를 재배열하면 상대편 단어가 될 수 있는 것을 아나그램이라고 한다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하시오.
(단, 아나그램 판별 시 대·소문자는 구별됨)
*입력 설명
첫 번째 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력된다. (단, 단어의 길이는 100을 넘지 않음)
*출력 설명
두 단어가 아나그램이면 "YES"를 출력하고, 아니면 "NO"를 출력한다.
풀이(Python)
답안(1)
import sys
sys.stdin = open('AA/input_40.txt', 'rt')
a = input()
b = input()
str1 = dict()
str2 = dict()
for x in a:
str1[x] = str1.get(x, 0)+1
for x in b:
str2[x] = str2.get(x, 0)+1
for i in str1.keys():
if i in str2.keys():
if str1[i] != str2[i]:
print("NO")
break
else:
print("NO")
break
else:
print("YES")
# 출력 : YES
답안(2) : 코드 개선
import sys
sys.stdin = open('AA/input_40.txt', 'rt')
a = input()
b = input()
sH = dict()
for x in a:
sH[x] = sH.get(x, 0)+1
for x in b:
sH[x] = sH.get(x, 0)-1
for x in a:
if sH.get(x) > 0:
print("NO")
break
else:
print("YES")
# 출력 : YES
input_40.txt(입력)
AbaAeCe
baeeACA
중요내용
- 입력 값의 알파벳 구성을 확인하기 위해 딕셔너리의 get() 함수를 사용한다.
- get() 함수는 매칭되는 키 값이 없으면 두 번째 인자를 반환한다. (위의 답안에서는 0을 반환함)
- 이러한 get() 함수의 특징을 활용하면, 딕셔너리에 키 값을 부여하는 과정을 생략할 수 있다.
- keys()는 해당 딕셔너리의 키 값들만 가져오는 함수이다.
'알고리즘' 카테고리의 다른 글
Algorithm - 최소힙 (0) | 2021.12.09 |
---|---|
Algorithm - 아나그램(리스트 해쉬) (0) | 2021.12.07 |
Algorithm - 단어 찾기(딕셔너리 해쉬) (0) | 2021.12.06 |
Algorithm - 교육과정 설계(큐) (0) | 2021.12.06 |
Algorithm - 응급실(큐) (0) | 2021.12.06 |
댓글