개발자가 되고 싶은 준개발자

[LeetCode] 7. Reverse Integer 파이썬 코드 본문

알고리즘 공부/LeetCode

[LeetCode] 7. Reverse Integer 파이썬 코드

준개발자 2021. 5. 29. 15:08

문제

7. Reverse Integer [Easy]

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).

Example 1:
Input: x = 123 
Output: 321

Example 2:
Input: x = -123 
Output: -321
Example 3:

Input: x = 120 
Output: 21
Example 4:
Input: x = 0 
Output: 0

코드

이 문제는 요즘의 손코딩 문제(?)스러운 것 같다.. 문제 자체는 난이도가 높지 않지만, 스스로 예외 케이스를 생각해서 빠짐없이 꼼꼼히 짜는 것이 포인트이다.

주요 포인트

1) 부호 

2) 0이 숫자 끝에 붙은 경우 (여러 개인 경우도 처리!)

3) 범위 체크! (파이썬에서 제곱은 2**n으로 표시. 2^n이 아니라!)

class Solution:
    def reverse(self, x: int) -> int:
        x = str(x)    

        # reverse string
        x = x[::-1]

        # if reversed integer starts with consecutive 0  
        # and is not 0, cut off front part
        if x[0] == '0' and x != '0':
            for i in range(len(x)):
                if x[i] != '0':
                    x = x[i:]
                    break
        
        # move sign bit to first digit if exists
        if not x[-1].isdigit():
            if x[-1] == '-':
                x = int(x[0:-1])*(-1)
            else:
                x = int(x[0:-1])
        else:
            x = int(x)
            
        # range check
        left_range = -1*2**31
        right_range = 2**31-1
        if x < left_range or x>right_range:
            return 0
        
        return x

결과