회문(Palindrome)이란 앞에서 읽으나 뒤에서 읽으나 같은 문자열을 의미합니다. 예를 들어 'malayalam', 'level', 'racecar' 등이 대표적인 회문입니다. 이 글에서는 파이썬의 표준 라이브러리 함수를 활용해 주어진 문자열이 회문인지 판별하는 방법을 단계별로 살펴보겠습니다.
1. reversed() 함수로 문자열 뒤집기
파이썬 표준 라이브러리에서 제공하는 reversed() 함수는 입력받은 객체를 역순으로 순회하는 reversed 객체를 반환합니다. 이 객체는 list() 함수를 통해 리스트 형태로 변환할 수 있습니다.
>>> str1 = 'malayalam' >>> l1 = list(reversed(str1)) >>> l1 ['m', 'a', 'l', 'a', 'y', 'a', 'l', 'a', 'm']
위 코드에서 원본 문자열 'malayalam'의 각 문자가 역순으로 리스트에 담긴 것을 확인할 수 있습니다.
2. join() 메서드로 리스트를 다시 문자열로 합치기
뒤집힌 문자들의 리스트를 하나의 문자열로 만들려면 join() 메서드를 사용합니다. 빈 문자열 ''을 기준으로 각 문자를 연결하면 됩니다.
>>> str2 = ''.join(str(x) for x in l1)
3. 두 문자열 비교하기
이제 원본 문자열 str1과 뒤집은 문자열 str2를 비교합니다. 두 문자열이 동일하다면 해당 문자열은 회문입니다.
>>> if str1 == str2:
print('palindrome')
else:
print('not palindrome')
'malayalam'은 거꾸로 읽어도 'malayalam'이므로 실행 결과로 palindrome이 출력됩니다.
추가 팁: 슬라이싱으로 더 간단하게 구현하기
파이썬에서는 문자열 슬라이싱 기법을 활용하면 위 과정을 한 줄로 줄일 수 있습니다. 슬라이스 표기법 [::-1]은 문자열을 뒤집는 가장 파이써닉한 방법으로 널리 사용됩니다.
>>> def is_palindrome(s):
return s == s[::-1]
>>> print(is_palindrome('malayalam')) # True
>>> print(is_palindrome('python')) # False
s[::-1]은 시작과 끝 인덱스를 생략하고 스텝을 -1로 지정하여 문자열 전체를 역순으로 복사하는 방식입니다. 불필요한 중간 변수 없이 깔끔하게 회문 여부를 검사할 수 있어 실무에서도 자주 활용됩니다.