본문 바로가기
Problem solving/LeetCode

[LeetCode] 7. Reverse Integer (C++)

by 겸 2023. 6. 23.

문제

정수x가 주어졌을 때 정수를 역으로 출력

생각할 것

Int 범위를 잘 고려해야 한다!

계산 중간 과정에서도 항상 long long형이 되도록 생각해야 한다.

res += (long long)digits.top() * place;

위 코드에서 long long을 붙이지 않으면 결괏값이 int형이 되어 범위를 초과할 수 있음

코드

class Solution {
public:
    int reverse(int x) {
        int sign = 1;
        if(x < 0) {
            sign = -1;
            x *= -1;      
        }

        stack<int> digits;
        while(x > 0){
            digits.push(x%10);
            x/=10;
        }

        long long res = 0;
        int place = 1;
        while(!digits.empty()){
            **res += (long long)digits.top() * place;**
            place *= 10;
            digits.pop();

            if(res < -1 * pow(2, 31) || pow(2,31) - 1 < res){
                return 0;
            }
        }

        return sign * res;
    }
};

개선할 점

위의 코드로 제출을 할 시 런타임 에러가 발생했다.

시간 복잡도가 O(n)이라고 생각했는데.. 어떻게 개선할 수 있을까?

코드를 다음과 같이 간소화 할 수 있다!

결과

class Solution {
public:
    int reverse(int x) {
        int res = 0;
        while(x){
            if(res < INT_MIN / 10 || res > INT_MAX / 10) return 0;
            res *= 10;
            res += x%10;  
            x /= 10;
        }
        return res;
    }
};
반응형