정수가 주어졌을 때, 그 숫자가 회문(Palindrome)인지 판별해야 하는 경우가 있습니다. 회문이란 앞에서 읽으나 뒤에서 읽으나 같은 숫자를 의미합니다.
예를 들어 454라는 숫자가 있다고 가정해 보겠습니다. 이 숫자를 뒤집어도 여전히 454이므로 회문입니다. 반면 -565를 뒤집으면 '565-'가 되어 원래 값과 다르기 때문에 회문이 아닙니다. 즉, 음수는 항상 회문이 될 수 없습니다.
해결 접근 방식
이 문제를 해결하는 가장 간단한 방법은 다음과 같습니다.
- 정수를 문자열로 변환합니다.
- 슬라이싱을 이용해 문자열을 뒤집습니다.
- 원래 문자열과 뒤집은 문자열이 같다면 회문이므로 True를 반환하고, 그렇지 않으면 False를 반환합니다.
구현 예제
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
val = str(x)
return val == val[::-1]
ob1 = Solution()
print(ob1.isPalindrome(424))
print(ob1.isPalindrome(-565))입력
x = 424 x = -565
출력
True False
코드 설명
핵심 로직은 단 한 줄입니다. Python의 슬라이싱 문법인 val[::-1]은 문자열을 역순으로 뒤집는 기능을 하며, 이를 원래 문자열과 비교하여 일치 여부를 바로 반환합니다. 시간 복잡도는 O(n)(n은 자릿수), 공간 복잡도 역시 O(n)으로 매우 효율적입니다.
만약 추가 메모리 사용 없이 풀고 싶다면, 숫자를 수학적으로 뒤집어(10으로 나눈 나머지와 몫을 활용) 원래 값과 비교하는 방법도 가능합니다. 다만 문자열 변환 방식이 코드가 가장 간결하고 이해하기 쉬워 실무에서 널리 사용됩니다.