이 글에서는 파이썬을 사용해 문자열에서 가장 많이 등장하는 문자와 그 개수를 찾는 방법을 예제 코드와 함께 알아보겠습니다.
문제 정의
임의의 입력 문자열이 주어졌을 때, 그 문자열 안에서 가장 자주 나타나는 문자가 무엇인지, 그리고 총 몇 번 등장했는지를 구해야 합니다.
접근 방법
collections.Counter를 사용해 문자열을 키로, 각 문자의 빈도를 값으로 하는 딕셔너리를 생성합니다.딕셔너리의 값들 중 최대 빈도를 찾은 뒤, 해당 빈도를 가진 항목의 인덱스를 구합니다.
그럼 아래 구현 예제를 확인해 보겠습니다.
구현 예제
from collections import Counter
def find(input_):
# 문자열을 키로, 빈도를 값으로 하는 딕셔너리 생성
wc = Counter(input_)
# 최대 출현 횟수 찾기
s = max(wc.values())
# 최대 빈도를 가진 항목의 인덱스 구하기
i = list(wc.values()).index(s)
print(list(wc.items())[i])
# 드라이버 프로그램
if __name__ == "__main__":
input_ = 'Tutorialspoint'
find(input_)
실행 결과
('t', 3)
'Tutorialspoint'라는 문자열에는 소문자 't'가 세 번 등장하므로, 위 프로그램은 ('t', 3)을 출력합니다. 참고로 이 코드에서 wc.values()와 wc.items()는 뷰(view) 객체이기 때문에 인덱스 접근을 위해 list()로 변환해 주어야 합니다.
더 간단한 방법: most_common() 활용
Counter 객체의 most_common() 메서드를 사용하면 위 과정을 훨씬 간결하게 처리할 수 있습니다. 이 메서드는 요소를 빈도순으로 정렬해 반환하므로, 첫 번째 결과만 가져오면 곧바로 최다 출현 문자를 얻을 수 있습니다.
from collections import Counter
def find(input_):
wc = Counter(input_)
# 빈도 기준 내림차순 정렬 후 첫 번째 항목 반환
char, count = wc.most_common(1)[0]
print((char, count))
if __name__ == '__main__':
find('Tutorialspoint')
두 방법 모두 시간 복잡도는 O(n)으로, 문자열 길이에 비례해 선형적으로 실행되므로 긴 문자열에서도 효율적으로 동작합니다.
결론
이 글에서는 파이썬의 collections.Counter 클래스를 활용해 문자열에서 가장 많이 등장하는 문자와 그 개수를 찾는 두 가지 방법을 살펴보았습니다. 최대값과 인덱스를 직접 구하는 방식과 most_common()을 활용하는 방식 중 상황에 맞는 방법을 선택해 사용하시면 됩니다.