본문 바로가기
PROGRAMMING/LeetCode

[Leetcode] 7. Reverse Integer_해설, 풀이, 설명

by HYUNHP 2022. 4. 6.
728x90
반응형

안녕하세요, HELLO

 

오늘은 Leetcode 알고리즘 문제 '7. Reverse Integer'에 대해서 살펴보고자 합니다. 

 

알고리즘 문제, 코드, 해설 그리고 Leetcode에서 제공해준 solution 순서대로 정리하였습니다.


STEP 1. 'Reverse Integer' 알고리즘 문제

 

STEP 2. 'Reverse Integer' 코드(code)

 

STEP 3. 'Reverse Integer' 해설

 

STEP 4. 'Reverse Integer' solution

 

반응형

 

STEP 1. '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 [-2 ** 31, 2 **31 - 1], then return 0.

 

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

 

32비트 정수 x가 주어지면 숫자를 반대로 입력한 x를 반환합니다. x를 반대로 한 값이 32비트 정수 범위 [-2**31, 2**31 - 1]를 벗어나면 0을 반환합니다.

계산 환경에서는 64비트 정수를 저장할 수 없다고 가정합니다.

 

Constraints:

  • -231 <= x <= 231 - 1

 


STEP 2. 'Reverse Integer' 코드(code)

 

■ Runtime: 84 ms, faster than 5.52% of Python3 online submissions for Reverse Integer.
■ Memory Usage: 13.9 MB, less than 18.40% of Python3 online submissions for Reverse Integer.

 

class Solution:
    def reverse(self, x: int) -> int:
        lst = []

        # 정수 고려
        # 음수 고려
        for i, value in enumerate(str(x)):
            if value == '.':
                pass
            else:
                lst += value

        if lst[0] == '-':
            new_lst = ['-'] +list(reversed(lst[1:]))
        else:    
            new_lst = list(reversed(lst))
        s = int(''.join(new_lst))

        return 0 if s > 2**31 -1 or s < -2**31 else s

STEP 3. 'Reverse Integer' 해설

 

문제를 제대로 파악하지 못하고, 정수형 데이터를 뒤집어서 계산하면 되는데, 소수점 이하도 고려해서 코드를 작성했습니다. 이에 따라 연산 속도는 떨어지고, 데이터 사용량이 커지는 단점이 발생했습니다. 

 

이에 따라, solution 코드를 살펴보며 제약 조건에서 벗어나는 경우 (more than 2**31 - 1, less than -2**31)에는 연산을 종료하는 것을 알게 되었습니다.

 

 

STEP 4. 'Reverse Integer' solution

 

추가적으로, Leetcode에서 제공해준 solution 코드를 살펴보겠습니다.

 

■ Runtime: 32 ms, faster than 92.14% of Python3 online submissions for Reverse Integer.
■ Memory Usage: 14 MB, less than 18.40% of Python3 online submissions for Reverse Integer.

 

class Solution:
    def reverse(self, x: int) -> int:
        if x >= 2**31-1 or x <= -2**31: return 0
        else:
            strg = str(x)
            if x >= 0 :
                revst = strg[::-1]
            else:
                temp = strg[1:] 
                temp2 = temp[::-1] 
                revst = "-" + temp2
            if int(revst) >= 2**31-1 or int(revst) <= -2**31: return 0
            else: return int(revst)

■ 마무리

 

오늘은 Leetcode 알고리즘 문제 '7. Reverse Integer'에 대해서 알아봤습니다.

좋아요와 댓글 부탁드리며,

오늘 하루도 즐거운 날 되시길 기도하겠습니다 :)

감사합니다.

 

반응형

댓글