파이썬 알고리즘-40 (해시) 아나그램

jiffydev·2020년 9월 11일
0

Algorithm

목록 보기
47/134
post-thumbnail

40.Anagram(아나그램 : 구글 인터뷰 문제)
Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아
나그램이라고 합니다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면
A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다. 즉 어느 한 단어를 재
배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세
요. 아나그램 판별시 대소문자가 구분됩니다.

▣ 입력설명
첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다.
단어의 길이는 100을 넘지 않습니다.

▣ 출력설명
두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.

▣ 입력예제 1
AbaAeCe
baeeACA

▣ 출력예제 1
YES

내 코드

string=input()
a=dict()
b=dict()
for i in string:
    if i in a.keys():
        a[i]+=1
    else:
        a.update({i:1})

string=input()
for i in string:
    if i in b.keys():
        b[i]+=1
    else:
        b.update({i:1})
if a==b:
    print('YES')
else:
    print('NO')

딕셔너리를 사용한 것은 좋았는데 get함수를 몰라서 코드가 복잡해졌다. 그리고 풀이처럼 각 value+1 -1 해서 0 만드는거는 생각도 못할듯

풀이

a=input()
b=input()
sH=dict()

for i in a:
    sH[i]=sH.get(i,0)+1
for i in b:
    sH[i]=sH.get(i,0)-1

for i in a:
    if sH.get(i)>0:
        print('NO')
        break
else:
    print('YES')

반성점

  • 딕셔너리에 대한 이해 부족

배운 것

  • dict.get(key,[default]): 딕셔너리의 key로 value를 가져오는 함수. 만약 key가 존재하지 않는다면 None을 돌려주는데, 이 때 함수의 인자로 디폴트 값을 넣어 주면 디폴드 값을 돌려준다. 이를 이용해 dic[i]=dic.get(i,0)+1을 해주면 i인 key가 있다면 value에 +1을, 존재하지 않는다면 key와 value 1을 딕셔너리에 추가해 줄 수 있다.
  • 딕셔너리가 같은지 확인할 때, dic1==dic2로도 확인할 수 있지만 만약 실전에서 결과가 안나올 경우에는 각각의 원소를 비교하는 것도 방법이다.
  • 만약 리스트를 이용해 해싱을 해야 한다면 아스키코드 값을 돌려주는 ord()함수를 이용해, 각 알파벳의 아스키코드 값을 인덱스로 하는 리스트를 작성하여 알파벳이 존재 한다면 그 알파벳의 인덱스에 +1을 해서 비교한다.
profile
잘 & 열심히 살고싶은 개발자

0개의 댓글