Google 태그 관리자 아이콘

알고리즘 풀이

.leetcode(7. Reverse Integer)

silvergoni 2022. 1. 16. 11:22
반응형

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

 

1. 2022.01.16 시도

소요시간: 10분

class Solution {
    public int reverse(int x) {
        if (-10 < x && x < 10 ) {
            return x;
        }
        int sign = (x >= 0) ? 1 : 1;

        int reversed = 0;
        while(x != 0) {
            int temp = (reversed * 10) + (x % 10);
            if (temp/10 != reversed) {
                //범위를 넘어버린 것
                return 0;
            }
            reversed = temp;
            x = x/ 10;
        } 
        
        return sign * reversed;
    }
}

풀이 접근 과정

integer palindrome을 구할때 배웠던 나눗셈방법을 사용했다. 공간의 제약이 있는 만큼 그 방법을 그대로 이용해보기로 했다.

integer 범위를 넘는지 체크하는건 임시 변수를 두고 나눗셈을 통해 확인했다.

느낀점

  • 하면서 하나 발견한게 Math.abs를 처음에 썼는데 -2147483648에 대해서는 제대로 동작을 하지 않았다. 이건 의외였다. 내부적으로 살펴보니 overflow가 있었다. MIN_VALUE(2^31)에 -를 부여하면 이는 MAX_VALUE(2^31-1) + 1이 되고 overflow가 되어서 다시 MIN_VALUE가 되는 것이다. stackoverflow에서 확인했다.

  • 이번 풀이는 2가지 포인트가 있다. 하나는 뒤집는 방법을 알고 있는가이고 두번째는 overflow를 어떻게 체크할 것인가이다.
  • 위의 풀이에서는 일의자리와 부호를 분리해서 생각했는데 구지 그렇게 하지 않아도 된다. 왜냐면 맨 앞자리를 할때 부호가 같이 포함되기 때문이다. 간단하게 고치면 아래와 같다. 솔루션은 Integer.MIN_VALUE, Integer.MAX_VALUE를 사용했는데 나는 내 방식이 더 재밌다.
    • ex) -123 => 3 => 2 => -1
class Solution {
    public int reverse(int x) {
        int reversed = 0;
        while(x != 0) {
            int temp = (reversed * 10) + (x % 10);
            if (temp/10 != reversed) {
                return 0;
            }
            reversed = temp;
            x = x/ 10;
        } 
        
        return reversed;
    }
}

 


알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)

반응형

 

'알고리즘 풀이' 카테고리의 다른 글

.leetcode(704. Binary Search)  (0) 2022.01.17
.leetcode(112. Path Sum)  (0) 2022.01.16
.leetcode(9. Palindrome Number)  (0) 2022.01.10
.leetcode(226. Invert Binary Tree)  (0) 2022.01.09
.leetcode(617. Merge Two Binary Trees)  (0) 2022.01.09