Problem :

https://leetcode.com/problems/palindrome-number/description/


My Solution :

class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0:
return False
stack = []
y = x
while y:
stack.append(y % 10)
y //= 10
while x:
if x % 10 != stack.pop():
return False
x //= 10
return True


Comment :

int를 str로 변환하면 Palindrome 여부를 쉽게 판단할 수 있지만 그렇게 풀지 말라고 적혀있어서...

일단 처음에는 Stack 자료구조를 이용하여 접근해 보았다. 사실 Palindrome는 중간까지만 해보면 확인이 가능한데 str이 아니라 int라 중간까지인지 확인하는게 불가능하다. 물론 처음에 자릿수를 한번 계산하면 되겠지만 그럼 두번 작업을 하는거니까...

따라서 아래와 같이 Stack을 사용하지 않고 산술 연산으로만 구현을 해보았다. Edge Case는 항상 조심.


My Solution2 :

class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x == 0:
return True
if x < 0 or x % 10 == 0:
return False
y = 0
while y <= x:
y = y*10 + x % 10
if y in (x, x//10):
return True
x //= 10
return False