[LeetCode]7.Reverse Integer

신동재·2021년 9월 16일
0

코딩테스트 준비

목록 보기
8/8

리트코드 코딩 테스트 준비
https://leetcode.com/problems/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 environment does not allow you to store 64-bit integers (signed or unsigned).

❗ 접근 방법

언뜻 보면 쉬워보이지만 문제에 함정이 있다.
1. x의 constraint에서 벗어날때는 return 0
2. 120을 뒤집을때는 021이 아닌 21을 출력
3. -부호도 신경쓰면서 뒤집어야 한다

⭕ 내가 작성한 코드

class Solution:
    def reverse(self, x: int) -> int:
        arr = []
        #음수라면 - 부호
        if x < 0 :
            x = -x
            arr.append('-')
        elif x == 0 :
            return 0
        #divmod를 이용하여 몫과 나머지 계산
        while x > 0:
            x, res = divmod(x, 10)
            arr.append(str(res))
        answer = int("".join(arr))
        # 제약조건
        if answer < -pow(2,31) or pow(2,31) - 1 < answer :
            return 0
        else :
            return answer        

💯 다른사람이 풀이한 코드

class Solution:
    def reverse(self, x: int) -> int:
        sentinel = '2147483648' if x < 0 else '2147483647'
        
        sign = -1 if x < 0 else 1
        s = str(x)[::-1].rstrip('-')
        no_overflow = s.rjust(len(sentinel), '0') < sentinel
        
        return int(s) * sign * no_overflow

🧑🏻 후기

rjust와 rstrip함수를 이용하여 훨씬 간단하게 표현하였다. time complexity가 미세하게 좋아졌다.

rjust함수

strip([chars]) : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거합니다.
lstrip([chars]) : 인자로 전달된 문자를 String의 왼쪽에서 제거합니다.
rstrip([chars]) : 인자로 전달된 문자를 String의 오른쪽에서 제거합니다.

profile
Software Developer / 1997.12.05

0개의 댓글