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

파이썬으로 문자열에서 가장 많이 등장하는 문자와 그 개수 찾기

이 글에서는 파이썬을 사용해 문자열에서 가장 많이 등장하는 문자와 그 개수를 찾는 방법을 예제 코드와 함께 알아보겠습니다.

문제 정의

임의의 입력 문자열이 주어졌을 때, 그 문자열 안에서 가장 자주 나타나는 문자가 무엇인지, 그리고 총 몇 번 등장했는지를 구해야 합니다.

접근 방법

  • 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()을 활용하는 방식 중 상황에 맞는 방법을 선택해 사용하시면 됩니다.