[알고리즘] 아나그램 (Hash)
(문제) 아나그램
Anagram이란 두 문자열이 알파벳의 나열 순서는 다르지만 그 구성이 일치하면 두 단어는 아나그램이라고 한다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치한다.
즉, 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 한다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하시오.
아나그램 판별시 대소문자가 구분된다.
입력설명
첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력된다.
단어의 길이는 100을 넘지 않다.
출력설명
두 단어가 아나그램이면 “YES”를 출력하고, 아니면 ”NO”를 출력한다.
테스트케이스
입력예제 | 출력예제 |
---|---|
AbaAeCe baeeACA |
YES |
ADFHTWXenq AXenqWDFHT |
YES |
ABCDEGHKNOPQRUWXbcdfghikotuwxy XbCdfGhiNoPuwUyABcDEgHKkOtQRxW |
YES |
ABCDqtqtqEFqGHIJKLMNOPQRSTUVWetagdgXYabcdefghijklmnopqrstuwxyz aBcdewrqwtqFghIJklMnOpqrsTuegagaeVxyYAbCDEfGHijKLmNoPQRStUwWXz |
NO |
해결방법
- 문자열을 받아서 반복문으로 문자열을 순회시켜
p
라는딕셔너리
를 생성하여 해당딕셔너리
안에 문자가 key값으로 가지고 있는지를 판단한다. - 만약 없을 경우 해당 문자를 key값으로 설정 후, value는 1로 설정한다.
- 만약 있을 경우 해당 문자의 key값 value를 +1 시킨다.
- 그 후, 두번째 문자열을 받아 반복문으로 문자열을 순회시켜
p
의 key 값과 연결 시켜 만약 받은 문자가 key값으로 없으면NO
를 출력한다. - 있을 경우 해당 key값의 value를 -1 시켜서 전부 0이 되도록 만든다.
- 만약 0 보다 작아지면 해당 문자는 아나그램이 아니기 때문에
NO
를 출력한다. - 모든 key값의 value가 0일 경우 해당 글자는 아나그램이기 때문에
YES
를 출력한다.
코드
p = dict()
for x in input():
if x in p.keys():
p[x] = p[x] + 1
else:
p[x] = 1
for y in input():
if y in p.keys():
p[y] = p[y] - 1
if p[y] < 0:
print("NO")
break
else:
print("NO")
break
else:
if any(list(p.values())):
print("NO")
else:
print("YES")
댓글남기기