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

파이썬으로 문자열에서 모든 중복 문자 찾는 방법

이 튜토리얼에서는 문자열에 포함된 모든 중복 문자를 찾는 방법을 배워보겠습니다. 파이썬에서는 다양한 방식으로 이 문제를 해결할 수 있으며, 여기서는 대표적인 두 가지 방법을 하나씩 살펴보겠습니다.

프로그램의 목표는 문자열 안에서 두 번 이상 등장하는 문자를 찾아내는 것입니다. 예를 들어 문자열이 tutorialspoint라면, 프로그램은 t o i를 출력해야 합니다. 즉, 등장 횟수가 1보다 큰 문자들을 모두 찾으면 됩니다.

방법 1: count() 메서드 활용하기

외부 모듈 없이 파이썬 기본 기능만 사용하는 첫 번째 방법입니다. 문자열의 count() 메서드를 이용해 각 문자의 등장 횟수를 확인합니다. 진행 순서는 다음과 같습니다.

  • 문자열을 초기화합니다.
  • 중복 문자를 담을 빈 리스트를 생성합니다.
  • 문자열을 순회하면서 각 문자의 빈도를 count()로 확인합니다.
  • 빈도가 1보다 크고 아직 리스트에 없다면 추가합니다.
  • 결과를 출력합니다.

예제 코드

## 문자열 초기화
string = "tutorialspoint"
## 중복 문자를 저장할 리스트 초기화
duplicates = []
for char in string:
    ## str.count(char)는 해당 문자의 등장 횟수를 반환
    if string.count(char) > 1:
        ## 리스트에 없는 경우에만 추가
        if char not in duplicates:
            duplicates.append(char)
print(*duplicates)

실행 결과

t o i

위 코드를 실행하면 중복된 문자인 t, o, i가 공백으로 구분되어 출력됩니다. 다만 이 방법은 문자마다 전체 문자열을 다시 탐색하므로 시간 복잡도가 O(n²)이라는 점을 참고하세요.

방법 2: 딕셔너리 활용하기

두 번째 방법은 내장 메서드 없이 딕셔너리 자료구조를 이용하는 것입니다. 각 문자의 등장 횟수를 직접 세는 방식으로, 더 효율적입니다. 진행 순서는 다음과 같습니다.

  • 문자열을 초기화합니다.
  • 문자 빈도를 저장할 빈 딕셔너리를 생성합니다.
  • 문자열을 순회하며 해당 문자가 딕셔너리에 있는지 확인합니다.
  • 이미 있다면 카운트를 1 증가시키고, 없다면 1로 초기화합니다.
  • 마지막으로 값이 1보다 큰 키만 출력합니다.

예제 코드

## 문자열 초기화
string = "tutorialspoint"
## 딕셔너리 초기화
duplicates = {}
for char in string:
    ## 이미 딕셔너리에 있는 경우 카운트 증가
    if char in duplicates:
        duplicates[char] += 1
    else:
        ## 없는 경우 카운트를 1로 초기화
        duplicates[char] = 1
for key, value in duplicates.items():
    if value > 1:
        print(key, end = " ")
print()

실행 결과

t o i

딕셔너리 방식은 문자열을 한 번만 순회하면 되므로 시간 복잡도가 O(n)으로, 긴 문자열을 다룰 때 count() 방식보다 훨씬 효율적입니다. 참고로 파이썬의 collections.Counter를 사용하면 같은 로직을 더 간결하게 구현할 수도 있습니다.