본문 바로가기
알고리즘

Algorithm - 아나그램(딕셔너리 해쉬)

by DGK 2021. 12. 7.

 

알고리즘 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

문제

[아나그램(딕셔너리 해쉬)]

 

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

 

 

중요내용

  1. 입력 값의 알파벳 구성을 확인하기 위해 딕셔너리의 get() 함수를 사용한다.
  2. get() 함수는 매칭되는 키 값이 없으면 두 번째 인자를 반환한다. (위의 답안에서는 0을 반환함)
  3. 이러한 get() 함수의 특징을 활용하면, 딕셔너리에 키 값을 부여하는 과정을 생략할 수 있다.
  4. 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

댓글