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

Python에서 Set()을 활용해 판그램(Pangram) 문자열 검사하기

이 글에서는 파이썬 3.x 이상 버전에서 주어진 문자열이 판그램(Pangram)인지 아닌지 판별하는 방법을 배워보겠습니다. 판그램이란 영어 알파벳의 모든 글자를 최소 한 번씩 포함하고 있는 문자열을 의미합니다. 아래 예시를 통해 살펴보겠습니다.

입력: str = 'This is the python blog on Tutorial point'
출력: No

입력: str = 'I want to contribute to a 'dxyzwuvghlkfmq' open source project'
출력: Yes

정의에 따르면 완전 판그램(perfect pangram)은 26개의 영어 알파벳 각각을 정확히 한 번씩만 사용하는 문장을 말합니다. 다만 이 튜토리얼에서는 완전 판그램 개념까지는 다루지 않습니다.

그럼 문제 상황과 제약 조건부터 살펴보겠습니다.

문제 정의

문제 − 주어진 문자열이 판그램인지 아닌지 확인합니다.

제약 조건

  1. 대문자와 소문자는 동일한 것으로 취급합니다.
  2. 앞서 언급한 완전 판그램 조건은 고려하지 않습니다.
입력: 첫 번째 줄에 테스트 문자열 'str_input'이 주어집니다.
출력: 조건이 참이면 'String is a Pangram'을 출력하고,
      그렇지 않으면 'String is not a Pangram'을 출력합니다.

관련 자료구조

Set()과 리스트 컴프리헨션(List Comprehension)

사전 지식

문자열(String)과 문자열 연산

알고리즘

이번 문제에서 구현할 알고리즘을 간단히 정리하면 다음과 같습니다.

  1. 먼저 입력받은 전체 문자열을 소문자 또는 대문자로 변환합니다. 여기서는 파이썬 문자열 자료형의 upper() 메서드를 사용해 대문자로 변환하겠습니다.
  2. 다음으로 set() 함수를 활용하면 입력 문자열에 포함된 중복 없는 고유 요소들의 집합을 만들 수 있습니다.
  3. 이제 숫자나 특수 문자를 제외한 알파벳만 담긴 새로운 리스트 "dist_list"를 생성합니다.
  4. 마지막으로 dist_list의 길이가 26인지 확인합니다. 조건이 참이면 입력 문자열은 판그램이고, 그렇지 않으면 판그램이 아닙니다.

예제 코드

# 판그램 여부를 확인하는 사용자 정의 함수
def check_pangram(input_str):
    # 입력 문자열을 대문자로 변환
    str_input = input_str.upper()

    # 입력 문자열을 Set()으로 변환하면
    # 중복이 제거된 고유 요소들의 집합이 생성됨
    str_input = set(str_input)

    # 숫자와 특수 문자를 걸러내고 알파벳만 추출
    # ord(ch)는 해당 문자의 아스키(ASCII) 코드 값을 반환
    dist_list = [char for char in str_input if ord(char) in range(ord('A'), ord('Z') + 1)]

    if len(dist_list) == 26:
        return 'String is a Pangram'
    else:
        return 'String is not a Pangram'

# 실행 가능한 메인 함수
if __name__ == "__main__":
    str_input = input()
    print(check_pangram(str_input))

마무리

이번 글에서는 파이썬 3.x 이상 버전에서 문자열이 판그램인지 판별하는 방법을 알아보았습니다. 핵심은 set()을 통해 중복을 제거하고, 리스트 컴프리헨션으로 알파벳만 필터링한 뒤 그 개수가 26개인지 확인하는 것입니다. 이 알고리즘은 언어에 종속적이지 않으므로, 동일한 로직을 응용하면 다른 프로그래밍 언어로도 손쉽게 판그램 검사 프로그램을 만들 수 있습니다.