[Algorithm] LeetCode 7번: Reverse Integer

YUSHIN KIM·2025년 9월 7일

Algorithm

목록 보기
12/20

LeetCode 7번: Reverse Integer Java Solution

1. Problem Definition & Analysis

64-bit 자료형을 활용하지 않고 숫자를 뒤집었을 때 오버플로우가 발생하는지 확인하는 문제이다.

숫자를 뒤집을 때 사용하는 로직은 다 비슷할 텐데, 주의해야 할 점은 10을 곱했을 때 오버플로우가 여러 번 발생할 수 있다는 점이다. 그래서 단순히 매 반복마다 부호를 대조하는 것은 유효하지 않다.

뒤집은 숫자를 yy에 저장한다고 가정하자. 매 반복마다 y=y×10+(xmod10)y = y \times 10 + (x \mod 10) 연산을 수행할 텐데, 연산 수행 전 yy의 값을 별도의 변수(pp)에 저장해 두고 연산 수행 이후 (y(xmod10))÷10(y - (x \mod 10)) \div 10pp의 값을 비교하면 된다.

오버플로우가 발생할 시에는 MSB(Most Significant Bit or Left-Most bit)에서 발생한 carry bit가 절삭되기 때문에 32-bit 자료형을 사용할 때는 위의 역 연산으로 오버플로우 발생 시 어떠한 경우에도 원래의 값을 복원할 수 없다.

2. Solution

class Solution {
    public int reverse(int x) {
        int t = Math.abs(x), y = 0;
        while (t > 0) {
            int p = y;
            y = y * 10 + (t % 10);
            if ((y - (t % 10)) / 10 != p)
                return 0;
            t /= 10;
        }
        return x > 0 ? y : -y;
    }
}
profile
안녕하세요

0개의 댓글