Anagram(아나그램)
Anagram이란 두 문자열이 알파벳의 나열 순서를 다르지만 그 구성이 일치하면 두 단어는 아 나그램이라고 합니다.
예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치합니다.
즉 어느 한 단어를 재 배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 합니다.
길이가 같은 두 개의 단어가 주어지면 두 단어가 아나그램인지 판별하는 프로그램을 작성하세 요.
아나그램 판별시 대소문자가 구분됩니다.
▣ 입력설명
첫 줄에 첫 번째 단어가 입력되고, 두 번째 줄에 두 번째 단어가 입력됩니다. 단어의 길이는 100을 넘지 않습니다.
▣ 출력설명
두 단어가 아나그램이면 “YES"를 출력하고, 아니면 ”NO"를 출력합니다.
▣ 입력예제 1
AbaAeCe
baeeACA
▣ 출력예제 1
YES
나의 코드
from collections import defaultdict
arr1=list(input())
arr2=list(input())
dic=defaultdict(int)
for x in arr1:
dic[x]=1
for x in arr2:
dic[x]=0
for x,y in dic.items():
if y==1:
print("No")
break
else:
print("YES")
들어온 입력을 키로 가지는 딕셔너리를 1로 체크하고 다음 입력 또한 들어온 입력을 0으로 체크한다.
그 후 딕셔너리의 값중 1이 있으면 No 없으면 Yes출력
+) dic=defaultdict(int) 에서 원래 같은 단어가 두번이상 들어오는지 인지를 못하고 int를 안넣고 작성을 했었다.
그럼 반례가 수많이 존재하는 잘못된 코드가 되므로 기본 값을0으로 넣어주는 int를 옵션에 넣었다
정답코드 1
import sys # 딕셔너리
sys.stdin=open("input.txt", "r")
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")
정답코드 2
# <딕셔너리 개선된 코드>
import sys
#sys.stdin=open("in1.txt", "r")
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")
x 라는 키 값이 없으면 0을 리턴 있으면 해당 값을 리턴 !
정답코드 3
import sys# 리스트
sys.stdin=open("input.txt", "r")
a=input()
b=input()
str1=[0]*52
str2=[0]*52
for x in a:
if x.isupper():
str1[ord(x)-65]+=1
else:
str1[ord(x)-71]+=1
for x in b:
if x.isupper():
str2[ord(x)-65]+=1
else:
str2[ord(x)-71]+=1
for i in range(52):
if str1[i]!=str2[i]:
print("NO")
break
else:
print("YES")
아스키 숫자를 활동해서 구현
str들의 인덱스를 52개로 한 이유는 알파벳은 총 26개이며 대/소문자를 위해 2배 !
대문자 A는 65~
소문자 a는 97~ ( 97-71 =26) 번 부터 소문자 인덱스 저장
'코딩테스트[파이썬] > 알고리즘 문제풀이 입문' 카테고리의 다른 글
[DFS기초] 이진수 출력 (0) | 2024.02.10 |
---|---|
[최소힙 & 최대힙] (0) | 2024.02.10 |
[스택 & 큐 &해쉬] - 단어찾기 (2) | 2024.02.10 |
[스택 & 큐] - 교육과정 설계 (0) | 2024.02.09 |
[스택 & 큐] -응급실 (0) | 2024.02.09 |