이 글에서는 다음과 같은 문제를 파이썬(Python)으로 해결하는 방법을 알아봅니다.
문제 정의
문제: 모음과 자음이 섞여 있는 문자열이 주어집니다. 문자열에서 모든 자음을 제거한 후, 남은 모음 문자열이 팰린드롬(회문)인지 아닌지를 판별하는 프로그램을 작성해야 합니다.
접근 방법
해결 절차는 다음과 같습니다.
- 주어진 문자열에서 자음을 모두 제거하여 모음만으로 이루어진 새로운 문자열을 만듭니다.
- 문자열에 모음이 하나도 없다면(즉, 자음만 존재하는 경우)
-1을 출력합니다. - 모음 문자열이 자기 자신을 뒤집은 문자열과 동일한지 비교하여 팰린드롬 여부를 확인합니다.
- 팰린드롬이면
YES, 아니면NO를 출력합니다.
파이썬에서는 슬라이싱 기법인 s[::-1]을 사용하면 문자열을 손쉽게 뒤집을 수 있어 팰린드롬 검사가 매우 간단합니다.
예제 코드
def extract_vowels(s):
# 문자열에서 자음을 제거하고 모음만 추출
vowels = "aeiou"
result = ""
for c in s:
if c.lower() in vowels:
result += c
return result
def is_palindrome(s):
# 문자열과 그 역순이 같은지 비교
return s == s[::-1]
# 드라이버 코드
s = "aeoea"
vowel_str = extract_vowels(s)
if len(vowel_str) == 0:
print(-1)
elif is_palindrome(vowel_str):
print("YES")
else:
print("NO")
출력 결과
YES
코드 설명
extract_vowels() 함수는 문자열을 한 글자씩 순회하면서 모음(a, e, i, o, u)에 해당하는 문자만 결과 문자열에 추가합니다. 대소문자를 모두 처리하기 위해 lower() 메서드를 함께 사용했습니다.
is_palindrome() 함수는 슬라이싱 s[::-1]로 뒤집은 문자열과 원본 문자열을 비교합니다. 두 문자열이 완전히 같다면 해당 문자열은 팰린드롬입니다.
드라이버 코드에서는 먼저 모음 문자열이 비어 있는지 확인하여 -1을 출력할지 결정하고, 그렇지 않은 경우 팰린드롬 여부에 따라 YES 또는 NO를 출력합니다.
이 알고리즘의 시간 복잡도는 문자열 길이를 n이라 할 때 O(n)이며, 추가로 사용되는 공간 복잡도 역시 O(n)입니다.
결론
이 글에서는 파이썬을 사용해 주어진 문자열에서 자음을 제거한 후, 남은 모음 문자열이 팰린드롬인지 확인하는 프로그램을 살펴보았습니다. 문자열 슬라이싱과 간단한 조건 분기를 활용하면 몇 줄의 코드로도 이 문제를 효율적으로 해결할 수 있습니다.