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

Python으로 문자열 접두사 검사하기 — 특정 알파벳 빈도가 더 높은 접두사만 골라내는 방법

개요

이 튜토리얼에서는 하나의 문자열과 두 개의 알파벳을 입력받아, 문자열의 모든 접두사(prefix)를 검사한 뒤 첫 번째 알파벳의 등장 빈도가 두 번째 알파벳보다 높은 접두사만 골라 출력하고, 마지막에 총 개수를 함께 보여주는 파이썬 프로그램을 작성해 보겠습니다.

먼저 예제를 통해 동작 방식을 살펴보겠습니다.

입력 예시 1

string:- apple
alphabets:- p, e

출력 예시 1

ap
app
appl
apple
4

'apple'의 접두사인 ap, app, appl, apple 네 개 모두에서 'p'의 개수가 'e'보다 많거나 같은 조건(첫 번째 알파벳이 더 많은 경우)을 만족하므로 4개가 출력됩니다.

입력 예시 2

string:- apple
alphabets:- e, p

출력 예시 2

0

반대로 비교 순서를 바꾸면, 어떤 접두사에서도 'e'의 빈도가 'p'보다 높지 않기 때문에 조건을 만족하는 접두사가 하나도 없어 결과는 0이 됩니다.

구현 단계

  • 재사용할 수 있도록 함수를 정의하고 그 안에 로직을 작성합니다.

  • 카운트 변수를 0으로 초기화하고, 접두사를 담을 빈 문자열을 준비합니다.

  • for 문으로 문자열 전체를 반복 순회합니다.

  • 문자열 슬라이싱과 인덱스를 이용해 현재 위치까지의 접두사를 추출합니다.

  • 추출한 접두사 안에서 두 알파벳의 등장 횟수를 비교합니다.

  • 조건을 만족하면 해당 접두사를 출력하고 카운트를 1 증가시킵니다.

  • 반복이 끝나면 최종적으로 매칭된 접두사의 총 개수를 출력합니다.

전체 코드

# 여러 번 호출할 수 있도록 함수로 정의
def prefixes(string, _1, _2):
    # 카운트 초기화
    count = 0
    # 접두사를 담을 빈 문자열
    prefix = ""
    # 문자열을 반복 순회
    for i in range(len(string)):
        # 슬라이싱으로 현재 위치까지의 접두사 추출
        prefix = string[:i + 1]
        # 접두사에서 두 알파벳의 빈도 비교
        if prefix.count(_1) > prefix.count(_2):
            # 조건을 만족하면 접두사 출력
            print(prefix)
            # 카운트 1 증가
            count += 1
    # 매칭된 접두사 총 개수 출력
    print(f"Total prefixes matched: {count}")

if __name__ == '__main__':
    # 함수 호출
    print("----------------apple p e---------------------")
    prefixes('apple', 'p', 'e')
    print()
    print("----------------apple e p---------------------")
    prefixes('apple', 'e', 'p')

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

----------------apple p e---------------------
ap
app
appl
apple
Total prefixes matched: 4
----------------apple e p---------------------
Total prefixes matched: 0

핵심 포인트 정리

이 문제의 핵심은 파이썬의 문자열 슬라이싱(string[:i+1])과 count() 메서드입니다. 슬라이싱으로 접두사를 손쉽게 만들고, count()로 각 알파벳의 빈도를 구해 비교하기 때문에 별도의 복잡한 자료구조 없이도 직관적으로 해결할 수 있습니다. 시간 복잡도는 문자열 길이를 n이라 할 때 O(n²) 수준이며, 학습용 예제로 적합합니다.

마무리

지금까지 문자열의 모든 접두사를 검사해 첫 번째 알파벳의 빈도가 더 높은 접두사만 출력하는 프로그램을 만들어 보았습니다. 코드를 이해하는 데 어려운 부분이 있다면 댓글로 질문을 남겨 주세요.