Mahdi Shamlou | LeetCode #7 해결: Reverse Integer — 오버플로우 안전성을 갖춘 수학 기반 역전
Source: Dev.to
Hey everyone! Mahdi Shamlou here — continuing my LeetCode classic problems series 🚀
After solving #6 Zigzag Conversion, today we’re tackling Problem #7 — Reverse Integer — a very common easy/medium question that looks simple at first… until you remember the 32‑bit integer overflow trap!

문제 설명
부호가 있는 32‑비트 정수 x가 주어질 때, 그 자릿수를 뒤집은 값을 반환합니다. x를 뒤집은 결과가 부호가 있는 32‑비트 정수 범위 [-2³¹, 2³¹ − 1]를 벗어나면 0을 반환합니다.
환경이 64‑비트 정수를 허용하지 않는다고 가정합니다.
예시
Input: x = 123
Output: 321
Input: x = -123
Output: -321
Input: x = 120
Output: 21
Input: x = 0
Output: 0
내 풀이
자릿수별로 뒤집으면서 오버플로우를 검사합니다. 문자열 변환을 피하고 수학적으로 뒤집기를 수행합니다 — % 10으로 자릿수를 꺼내고, 뒤집힌 숫자를 만들며, 10을 곱하고 자릿수를 더하기 전에 오버플로우를 확인합니다.
class Solution:
def reverse(self, x: int) -> int:
reversed_x = 0
# Handle the sign separately
sign = 1 if x >= 0 else -1
x = abs(x)
while x > 0:
digit = x % 10
x //= 10
# Check for overflow before adding the new digit
# 2**31 - 1 = 2147483647
# -2**31 = -2147483648
if reversed_x > (2147483647 - digit) // 10:
return 0
if reversed_x < (-2147483648 + digit) // 10:
return 0
reversed_x = reversed_x * 10 + digit
return sign * reversed_x
코드는 모든 테스트 케이스를 통과하며, 실제로 오버플로우가 발생하기 전에 잡아내기 때문에 깔끔합니다.
전체 솔루션은 다음 저장소에서 확인할 수 있습니다:
GitHub – mahdi0shamlou/LeetCode: Solve LeetCode Problems
시간 및 공간 복잡도
- 시간:
O(log |x|)— 각 자릿수를 한 번씩 처리합니다. - 공간:
O(1)— 정수 변수 몇 개만 사용합니다.
결과
제출 후, 오버플로우 경우에는 올바르게 0을 반환하고, 일반 경우에는 정확히 뒤집힌 값을 반환합니다. 성공적인 제출 화면 스냅샷은 다음과 같습니다:
