[golang] LeetCode #7. Reverse Integer

kameals·2020년 3월 3일
2

leetcode

목록 보기
14/14
post-thumbnail

1. 문제

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

Note:

Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−2^31, 2^31 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

해설

32비트 부호를 가진 integer가 주어질 때, 역순의 값을 구하라.

2. 접근

// 인터넷에 찾아보니, 양수 integer를 역순으로 처리하는 방법은 있었기 때문에
// 음수일 때의 처리만 추가해주었다.

3. 내가 작성한 답

func reverse(x int) int {
    new_int := 0
    if x >= 0 {
        for x > 0 {
            remainder := x % 10
            new_int *= 10
            new_int += remainder 
            x /= 10
        }
        return new_int
    } else {
        x *= -1
        for x > 0 {
            remainder := x % 10
            new_int *= 10
            new_int += remainder
            x /= 10
        }
        return new_int * (-1)
    }
}

이렇게 했다가 대차게 틀렸다.

예시는 맞았는데, 제출하니 오답처리가 되었다.
이유를 생각해보니, note를 읽지않은 것이 문제.

수정했다.

func reverse(x int) int {
    new_int := 0
    if x >= 0 {
        for x > 0 {
            remainder := x % 10
            new_int *= 10
            new_int += remainder 
            x /= 10
        }
        // int32 최대값을 초과하는지를 확인하는 조건을 추가했다.
        if new_int > math.MaxInt32 {
            return 0
        }
        return new_int
    } else {
        x *= -1
        for x > 0 {
            remainder := x % 10
            new_int *= 10
            new_int += remainder
            x /= 10
        }
        // int32 최소값을 초과하는지를 확인하는 조건을 추가했다. 
        if new_int * (-1) < math.MinInt32 {
            return 0
        }
        return new_int * (-1)
    }
}

4. 다른 유저의 답안

빠른 속도를 내세운 답변

func reverse(x int) int {
    //math.MinInt32 = -2147483648
    //math.MaxInt32 = 2147483647
    var result int
    for x!=0{
        result=result*10+x%10
        if result > 2147483647  || result < -2147483648{
            return 0
        }
        x/=10
    }
    return result
}

가장 많은 투표를 받은 답변

func reverse(x int) int {
    var result int
    for x != 0 {
        result = result * 10 + x % 10
        x = x / 10
    }
    if result < math.MinInt32 || result > math.MaxInt32 {
        return 0
    }
    return result
}

5. 추가로 공부한 내용

6. 반성

  • 바로 구글링해보는 습관으로 인해 오히려 더 좋은 방법 및 더 단순화할 수 있는 방법을 놓치게 되었다.
  • 다음부터는 좀 더 생각하는 시간을 가지자.
  • note 를 유심히 읽자.
  • 주어진 조건이 함의하고 있는 내용까지 잘 이해하자.
profile
팀의 윤활유 역할이 되고 싶은 소박한 개발자입니다. 좌우명은 '밝고 바르고 튼튼하자'

0개의 댓글