- Palindrome Number
- https://leetcode.com/problems/palindrome-number/
- 들어온 숫자가 회문(Palindrome)인지 확인하는 문제
- 기존 문제들과 아주 조금 다른 점은 문자열이 아니라 정수!
- 기존 문자열 회문 문제는 풀어서 블로그에 정리 했었다.(https://twpower.github.io/110-determine-if-string-is-palindrome)
- 문자열로 변환하고 위에 링크에 나온대로 하면 쉽게 풀 수 있다.
- 검색을 하다보니 문자열로 변환하지 않고 할 수 있는 방법이 있어서 그 방법으로 풀었다.(역시 세상은 넓고 배울게 많다.)
- 생각해보면 10으로 나눈 나머지와 가장 앞에 자릿수만 구해서 비교하고 양끝읕 자르면 된다.
- 그러면 일의 자리는 구하기 쉬운데 가장 앞에 자릿수는?!
- Divisor를 10부터 들어온 숫자를 Divisor로 계속 나누면서 일의 자리가 될때까지 10을 곱하면서 Divisor를 구한다. 이러면 주어진 최고 자리 숫자가 10의 몇승인지를 알 수 있다!
- 음수는 문제에서 안된다고 설명이 나와있다.
- 문자열로 할 수 있는 간단한 파이썬 코드 하나 그리고 나머지는 정수를 그대로 사용하는 방법을 썼다.
- https://leetcode.com/submissions/detail/455929299/
- 슬라이싱 참고는 [Python] 파이썬 슬라이싱(slicing) 기본과 예제
class Solution:
def isPalindrome(self, x: int) -> bool:
s = str(x)
return s == s[::-1]
func getDivisor(x int) int {
divisor := 1
for x / divisor >= 10 {
divisor *= 10
}
return divisor
}
func isPalindrome(x int) bool {
if x < 0 {
return false
}
divisor := getDivisor(x)
for x != 0 {
front := x / divisor
rear := x % 10
if(front != rear){
return false
}
x %= divisor
divisor /= 100
x /= 10
}
return true
}
def get_divisor(n):
divisor = 1
while n / divisor >= 10:
divisor *= 10
return divisor
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0:
return False
divisor = get_divisor(x)
while x != 0:
front = x // divisor
rear = x % 10
if front != rear:
return False
x %= divisor
divisor /= 100
x //= 10
return True
- 문자열로만 간단하게 처리하려 했다.
- 다양한 방법이 있을 수 있다.
- 양 끝을 자를때 계산 실수가 있었다. 일의 자리수를 없애는건 10으로 나눈 몫을 가져와야하는데 나머지를 가져오는 실수를 했다.
- 없음