HelloCho

[Python] #7.Reverse Integer (Easy) 본문

코테/LeetCode

[Python] #7.Reverse Integer (Easy)

choo2969 2020. 8. 26. 23:45

문제 #7. Reverse Integer(Easy)

이 문제는 입력된 int값을 뒤집어서 값이 [-2^32 ~2^32-1] 값 사이에 존재하면 뒤집은 값을 그렇지 않을 경우 0을 출력하는 문제이다. 

이 문제는 두가지 방법을 이용해서 문제를 해결했다. 

첫 번째 방법은 interger 값을 str값으로 변환 후 뒤집는 방법을 사용했다. 

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

값이 음수일 경우에 부호값을 처리하기 위해서 x[0] 번째의 값을 따로 분리하고 그 외의 값을 뒤집어 합쳐준다.

값이 양수일 경우에는 값을 뒤집는다.

뒤집은 값이 [-2^32 ~2^32-1] 값 사이에 존재하면 뒤집은 값을 그렇지 않을 경우 0을 출력하도록 했다.

속도는 32ms, 메모리는 13.6 MB이다.

두 번째 방법은 str을 사용하지 않고 값을 변환하는 방법이다.

class Solution:
    def reverse(self, x: int) -> int:
        res = 0
        flag = -1 if x <0 else 1
        x = abs(x)
        while x != 0 :
            p = x % 10 
            x = x//10
            res = res * 10 +p
        if x > 2**31 or x < -2**31 :
            return 0
        return flag * res

공식은 다음과 같다.

res = res * 10 + p (여기서 p는 10으로 나눈 나머지 값)

단계적으로 살펴보면 

ex) 123의 경우 

1. p = 3, res = 0   ==>  0*10 + 3  = 3    res값에 3이 입력

2. p = 2, res = 3 3*10 + 2 = 32 

반복하다보면 반대로 뒤집을 수 있다. 

속도는 24ms, 메모리는 13.7MB이다. 

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

[Python] #2. Add Two Numbers(Medium)  (0) 2020.08.29
[Python] #14. Longest Common Prefix(Easy)  (0) 2020.08.29
[Python] #13. Roman to Integer(Easy)  (0) 2020.08.26
[Python] #9.Palindrome Number (Easy)  (0) 2020.08.26
[Python] #1.Two Sum (Easy)  (0) 2020.08.26
Comments