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

파이썬으로 두 문자열에서 흔하지 않은 단어 찾기

이번 글에서는 두 개의 문자열이 주어졌을 때, 한쪽에만 등장하는 단어 즉 '흔하지 않은 단어(uncommon words)'를 찾는 파이썬 프로그램 작성 방법을 알아보겠습니다.

문제 정의

문제: 두 개의 문자열 A와 B가 주어집니다. 이때 두 문자열 중 오직 한 곳에만 등장하는 단어들을 모두 추출해야 합니다. 예를 들어 "Tutorials point"와 "Python on Tutorials point"가 주어진다면, 결과는 ['Python', 'on']이 되어야 합니다.

접근 방법

이 문제를 해결하는 가장 간단하고 효율적인 방법은 딕셔너리(dictionary)를 이용해 단어별 등장 횟수를 세는 것입니다.

  1. 두 문자열을 각각 공백을 기준으로 분리(split)합니다.
  2. 각 단어가 등장할 때마다 딕셔너리의 카운트를 1씩 증가시킵니다.
  3. 마지막으로 등장 횟수가 정확히 1인 단어들만 리스트로 반환합니다.

양쪽 문자열에 모두 나타난 단어는 카운트가 2 이상이 되므로 자연스럽게 제외됩니다. 이 방식의 시간 복잡도는 O(n + m)(n과 m은 각 문자열의 길이)로 매우 효율적입니다.

구현 예제

# 흔하지 않은 단어 찾기
def find(A, B):
    # 단어별 등장 횟수를 저장할 딕셔너리
    count = {}
    # 문자열 A의 단어 삽입
    for word in A.split():
        count[word] = count.get(word, 0) + 1
    # 문자열 B의 단어 삽입
    for word in B.split():
        count[word] = count.get(word, 0) + 1
    # 등장 횟수가 1인 단어만 반환
    return [word for word in count if count[word] == 1]

# 메인 실행부
A = "Tutorials point"
B = "Python on Tutorials point"
print("두 문자열의 흔하지 않은 단어:", find(A, B))

실행 결과

두 문자열의 흔하지 않은 단어: ['Python', 'on']

코드 설명

위 코드에서 count.get(word, 0)은 해당 단어가 딕셔너리에 존재하지 않을 경우 기본값 0을 반환하므로, KeyError 없이 안전하게 카운트를 증가시킬 수 있습니다. 마지막 부분의 리스트 컴프리헨션(list comprehension)은 등장 횟수가 정확히 1인 단어만 필터링하여 새로운 리스트로 반환합니다. 모든 변수는 함수 내부의 지역 범위(local scope)에서 선언되며, 함수 호출이 종료되면 함께 소멸합니다.

결론

이번 글에서는 파이썬의 딕셔너리와 split(), get() 메서드를 활용해 두 문자열에서 흔하지 않은 단어를 찾는 방법을 배웠습니다. 이 접근법은 코드가 간결할 뿐만 아니라 선형 시간 복잡도를 가지므로, 대량의 텍스트를 다루는 실무 환경에서도 널리 활용됩니다.