넘치게 채우기

[LeetCode] 7. Reverse Integer 본문

PS/LeetCode

[LeetCode] 7. Reverse Integer

riveroverflow 2023. 4. 30. 16:45
728x90
반응형

https://leetcode.com/problems/reverse-integer/description/

 

Reverse Integer - LeetCode

Can you solve this real interview question? Reverse Integer - Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0. Assume the envir

leetcode.com

문제 유형 : 수학

난이도 : Medium

 

문제

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

32비트정수 x를 받으면, 뒤집어서 반환시켜라. 단, 범위를 넘어서는 경우 0을 반환하고, 64비트의 저장은 허용되지 않는다.

 

입력

int형 정수 x가 입력된다.

 

출력

범위를 넘어서는 경우 0을 반환하고, 수를 뒤집어서 반환시킨다.

 

풀이 아이디어

1의자릿수를 잘라서 누적시키고, 다음 반복문에서는 누적값을 10배 늘리고 또 누적시켜서 자릿수를 올리는 방식을 사용했다.

 

그러나, 예외 처리에서 막혔었다. 한참을 고민하다 결국 인터넷의 힘을 빌리는데..

만약 누적값에 10이 곱해졌을 때 int범위를 넘어서는 순간에 예외처리를 하면 되는 것이였다. 그리고, limits라는 헤더파일을 이용해 

INT_MAX와 INT_MIN으로 쉬운 활용이 가능했다.

 

코드(C++)

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            if (rev > INT_MAX / 10 || (rev == INT_MAX / 10 && x % 10 > 7)) {
                return 0;
            }
            if (rev < INT_MIN / 10 || (rev == INT_MIN / 10 && x % 10 < -8)) {
                return 0;
            }
            rev = rev * 10 + x % 10;
            x /= 10;
        }
        return rev;
    }
};
728x90
반응형

'PS > LeetCode' 카테고리의 다른 글

[LeetCode] 1137. N-th Tribonacci Number  (0) 2023.04.30
[LeetCode] 509. Fibonacci Number  (0) 2023.04.30
[Leetcode] 134. Gas Station  (0) 2023.04.29
[LeetCode] 258. Add Digits  (0) 2023.04.27
[LeetCode] 13. Roman to Integer  (0) 2023.04.26