강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

gg yo님의 프로필 이미지
gg yo

작성한 질문수

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

자료구조 9. 아나그램 딕셔너리 개선코드에서 질문있습니다.

해결된 질문

작성

·

178

0

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")

개선된 코드를 쓰면 아래 반복문이 a문자열인 key값만 돌아서 만약 b가 a를 완전히 포함하고 a에 없는 문자가 포함되어있을 시 출력이 YES가 됩니다 실제 YES가 출력되는 입력예제인 AbaAeCe baeeACA 에서 뒤의 문자열에 fff만 붙여서 해봣더니 역시 NO가 아니라 Yes가 출력됩니다.  제가 생각한게 맞을까요?

그리고 저는 아래코드처럼 강사님 수정전 코드에서 딕셔너리를 단순 == 연산으로 비교했는데 이렇게 구현하는거는 문제의 취지에서 벗어난 정답인가요?

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

if str1 == str2:

    print("YES")

else:

    print("NO")

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

문제를 읽어보면 "길이가 같은 두 개의 단어가 주어지면"

라고 되어 있습니다. 단어의 길이가 같다라는 전제조건이 있습니다.

==으로 해도 상관없습니다. 저도 처음에는 ==으로 했는데 너무 없어 보여서 영상을 바꾼겁니다. 파이썬은 두 딕셔너리를 ==으로 비교해도 됩니다. 

만약 다른 길이가 주어진다면 아래와 같이 해도 좋습니다.

if len(a)!=len(b) print("NO")

else: 

    아나그램 검사

gg yo님의 프로필 이미지
gg yo
질문자

아 제가 문제를 제대로 안읽었네요 답변 달아주셔서 감사합니다:D

gg yo님의 프로필 이미지
gg yo

작성한 질문수

질문하기