https://youtu.be/yubRKwixN-U?si=w6hr9gibc6M_HInC
class Solution:
def isPalindrome(self, x: int) -> bool:
# 음수는 무조건 팰린드롬이 될 수 없음
if x < 0:
return False
# 숫자 0은 팰린드롬으로 간주
if x == 0:
return True
# 이제 양수만 처리
# 자리수 계산을 위해 10의 몇 승인지 결정할 변수 초기화
div = 1
# x의 자리수에 맞는 나눗셈(div) 값을 결정
while x >= 10 * div:
div *= 10 # div를 10씩 곱해가며 x보다 작은 최대 10^n 값을 찾음
# 팰린드롬 확인
while x:
# 오른쪽 숫자 추출 (1의 자리)
right = x % 10 # x를 10으로 나눈 나머지가 1의 자리 숫자
# 왼쪽 숫자 추출 (가장 큰 자리수)
left = x // div # x를 div로 나눈 몫이 가장 큰 자리 숫자
# 왼쪽과 오른쪽 숫자가 다르면 팰린드롬이 아님
if left != right:
return False
# 왼쪽과 오른쪽이 같다면, 해당 자리수를 제거하고 남은 숫자를 계산
# x % div는 가장 큰 자리수를 제거 (ex: 12345 → 2345)
# 그 결과를 10으로 나누어 오른쪽 자리수를 제거 (ex: 2345 → 234)
x = (x % div) // 10
# div 값을 100으로 나눠서 비교할 자리수를 줄임
div //= 100 # div를 100으로 나눠야 양쪽에서 자리수가 1씩 줄어듦
# 모든 자리수를 확인한 결과 팰린드롬이면 True 반환
return True
상세 설명
- 팰린드롬이란?
- 팰린드롬 숫자는 앞뒤가 똑같은 숫자입니다.
- 예: 121, 1221, 12321 (모두 팰린드롬)
반면, 123, -121은 팰린드롬이 아닙니다.
- 음수와 0 처리:
- 음수는 무조건 팰린드롬이 아니므로 False 반환.
- 숫자 0은 팰린드롬으로 간주하므로 True 반환.
- 자리수 계산:
- 주어진 숫자가 몇 자리수인지 알아내기 위해 div를 사용.
- 예: x = 12345라면, div = 10000이 됩니다.
- 왼쪽과 오른쪽 자리 비교:
- 오른쪽 자리: x % 10 (나머지 연산으로 1의 자리 숫자 추출)
- 왼쪽 자리: x // div (몫 연산으로 가장 큰 자리 숫자 추출)
- 자리수 제거:
- 양쪽에서 가장 큰 자리수와 가장 작은 자리수를 제거:
- x % div: 왼쪽 자리 제거.
- // 10: 오른쪽 자리 제거.
- div //= 100: 자리수 비교를 위해 div를 두 자리 줄임.
- 양쪽에서 가장 큰 자리수와 가장 작은 자리수를 제거:
- 팰린드롬 판별:
- 왼쪽과 오른쪽 숫자가 다르면 False 반환.
- 모든 자리수를 확인해도 문제 없으면 True 반환.
실행 예제
입력: 121
- div = 100 (가장 큰 자리수 찾기)
- 1번 비교:
- right = 121 % 10 = 1
- left = 121 // 100 = 1,
- (같음)
- x = (121 % 100) // 10 = 2,
- div = 100 / 100 = 1
- 2번 비교:
- x = 2, div = 1
- right = 2 % 10 = 2
- left = 2 // 1 = 2,
- (같음)
- x = (2 % 100) // 10 = 0,
- div = 1 / 100 = 0
- x = 0, div = 0
출력: True
입력: 123
- 1번 비교:
- right = 123 % 10 = 3
- left = 123 // 100 = 1,
- (다름)
출력: False
이 코드는 숫자의 각 자리수를 직접 비교하기 때문에 추가 공간 없이 효율적으로 팰린드롬을 확인합니다.
'LeetCode > Top Interview 150' 카테고리의 다른 글
172. Factorial Trailing Zeroes (2) | 2024.12.18 |
---|---|
66. Plus One (0) | 2024.12.18 |
201. Bitwise AND of Numbers Range (0) | 2024.12.18 |
137. Single Number II (0) | 2024.12.18 |
67. Add Binary (0) | 2024.12.17 |