Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 Collections.Counter()로 두 문자열이 아나그램인지 확인하는 방법

두 문자열이 동일한 문자들을 포함하되 서로 다른 순서로 배열되어 있을 때, 이를 아나그램(anagram)이라고 부릅니다. 예를 들어 'spot'과 'post'는 같은 글자들로 이루어진 서로 다른 단어이므로 아나그램입니다. 이번 글에서는 파이썬을 사용해 두 문자열이 서로의 아나그램인지 확인하는 방법을 알아보겠습니다.

이를 위해 파이썬의 collections 모듈을 활용합니다. collections 모듈은 리스트(list), 딕셔너리(dict), 셋(set), 튜플(tuple)과 같은 데이터 컬렉션을 효율적으로 다룰 수 있게 해주는 다양한 도구를 제공합니다. 그중 Counter() 함수는 컬렉션 안에 각 요소가 몇 번 등장했는지 세어, 요소와 개수를 키-값 쌍으로 담은 딕셔너리 형태로 반환합니다.

따라서 두 문자열에 포함된 각 문자의 등장 횟수가 정확히 일치한다면, 두 문자열을 아나그램으로 판단할 수 있습니다.

예제 코드

from collections import Counter

StringA = 'top spot'
StringB = 'pot post'

# 각 문자열의 문자 빈도수를 딕셔너리 형태로 출력
print(Counter(StringA))
print(Counter(StringB))

# 두 딕셔너리 비교
if Counter(StringA) == Counter(StringB):
    print('StringA와 StringB는 아나그램입니다.')

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

Counter({'p': 2, 't': 2, 'o': 2, 's': 1, ' ': 1})
Counter({'p': 2, 't': 2, 'o': 2, 's': 1, ' ': 1})
StringA와 StringB는 아나그램입니다.

참고 사항

Counter()는 공백과 대소문자도 하나의 요소로 취급하여 비교합니다. 만약 공백을 무시하고 싶다면 replace(" ", "")로 공백을 제거한 뒤 비교하고, 대소문자를 구분하지 않으려면 lower() 메서드를 먼저 적용하면 됩니다. 이러한 전처리 과정을 거치면 더 유연하게 아나그램 여부를 검사할 수 있습니다.