주어진 문자열 s가 회문(palindrome)인지 아닌지 판별해야 합니다. 회문이란 앞에서 읽으나 뒤에서 읽으나 동일한 단어나 문장을 의미합니다.
예를 들어 입력이 s = "racecar"라면, 이 문자열은 거꾸로 읽어도 "racecar"이므로 출력 결과는 True가 됩니다.
풀이 접근 방법
이 문제는 다음 단계로 간단히 해결할 수 있습니다.
- 문자열
s의 역순(reversed) 버전을 변수t에 저장합니다. - 만약
t와s가 같다면True를 반환합니다. - 그렇지 않다면
False를 반환합니다.
파이썬의 슬라이싱(slicing) 기법 [::-1]을 사용하면 별도의 반복문 없이 문자열을 손쉽게 뒤집을 수 있어 코드가 매우 간결해집니다.
구현 예제
class Solution:
def solve(self, s):
t = s[::-1]
if t == s:
return True
else:
return False
ob = Solution()
print(ob.solve("racecar"))입력
"racecar"
출력
True
추가 설명
s[::-1]은 파이썬 슬라이싱 문법으로, 시작과 끝 인덱스를 생략하고 스텝을 -1로 지정하여 문자열 전체를 역순으로 만듭니다. 시간 복잡도는 O(n)이며, 공간 복잡도 역시 뒤집힌 문자열을 저장하기 위해 O(n)입니다.
메모리 사용을 줄이고 싶다면 양쪽 끝에서부터 포인터를 이동시키며 문자를 비교하는 두 포인터(two-pointer) 기법을 사용할 수도 있습니다. 이 경우 추가 공간 없이 O(n) 시간에 회문 여부를 판별할 수 있습니다.