본문 바로가기
python

[PYTHON] leetcode reverse Integer 문제풀이

디지털노마드 2021. 3. 16.
반응형

[PYTHON] leetcode reverse Integer 문제풀이

 

이번문제로 easy 라 그런지 그다지 어렵지 않은듯 했지만, 또! 또! 문제를 잘못읽어서 한시간 정도 낭비했다. 문제는 x 라는 수가 주어지면 한 숫자씩 거꾸로 만들어서 return 하는 간단한 문제이다. 예를 들어 123이 주어지면 321로, 1020이 주어지면 0으로 시작하는 것을 제외하고 201로 바꾸어 주는 문제이다. 다만 조건이 하나 있는데 바뀐 숫자가 (-2^31) ~ (2^31)-1 의 범위를 벗어나게 되면 0을 return 해야 한다. 이걸 문제에서 열심히 안읽고 왜 0이 답이라고 했는지 한참을 해맸다. 오죽하면 문제가 틀린것 같다는 구글링을 하고 있었으니 -_-

 

leetcode

최적화는 가능하겠지만, 일단 처음에 푼 코드를 올려본다. 너무 직관적인 코드라 설명은 없어도 될 것 같다. 

 

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

        originalTxt = str(x)
        returnTxt = ''
        print(originalTxt)
        check1stZero = 1;


        if(originalTxt[0] == '-'):
            returnTxt = '-'

            for i in range(1, len(originalTxt)):

                if(originalTxt[len(originalTxt) - i] == 0 and check1stZero == 1):
                    #do nothing
                    print("do nothing")

                elif(originalTxt[len(originalTxt) - i] != 0):

                    check1stZero = 0;
                    returnTxt = returnTxt + originalTxt[len(originalTxt) - i]

                elif(originalTxt[len(originalTxt) - i] == 0 and check1stZero == 0):

                    returnTxt = returnTxt + originalTxt[len(originalTxt) - i]

                else:
                    print("do nothing")

        else:

            for i in range(len(originalTxt)):

                if(originalTxt[len(originalTxt) - 1 - i] == 0 and check1stZero == 1):
                    #do nothing
                    print("do nothing")

                elif(originalTxt[len(originalTxt) - 1 - i] != 0):

                    check1stZero = 0;
                    returnTxt = returnTxt + originalTxt[len(originalTxt) - 1 - i]

                elif(originalTxt[len(originalTxt) - 1 - i] == 0 and check1stZero == 0):

                    returnTxt = returnTxt + originalTxt[len(originalTxt) - 1 - i]

        print(returnTxt)
        returnInt = int(returnTxt)

        if returnInt in range(-2**31, 2**31 - 1):
            print("do nothing")
        else:
            return 0

        return returnInt

for 문과 if 문을 주구장창 쓴 아주 전형적인 초보자스타일의 코드이다. 다른 사람들이 푼 솔루션을 보면 비트연산으로 굉장히 짧은 코드가 나오던데 한번 시간내서 분석을 해 봐야 겠다. 무슨 3~4줄만에 코드를 완성시켜 버리니 나는 아직 상대가 안된다. 

 

 

반응형

댓글