개요
이 튜토리얼에서는 하나의 문자열과 두 개의 알파벳을 입력받아, 문자열의 모든 접두사(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²) 수준이며, 학습용 예제로 적합합니다.
마무리
지금까지 문자열의 모든 접두사를 검사해 첫 번째 알파벳의 빈도가 더 높은 접두사만 출력하는 프로그램을 만들어 보았습니다. 코드를 이해하는 데 어려운 부분이 있다면 댓글로 질문을 남겨 주세요.