Leetcode) Reverse Integer

Duna·2021년 8월 21일
0
post-thumbnail

Top Interview Questions
Easy Collection

Link of Problem

LEVEL : 🌕 🌕 🌑 🌑 🌑 (하)


Easy Collection String의 두번째 문제인 Reverse Integer를 풀어봤습니다.

Reverse Interger문제도 저번 Reverse String만큼 쉬웠습니다. 말 그대로 Integer를 Reverse시키는 겁니다.

조금 걸리는 부분이 있었다면,
1. 음수도 들어올 수 있기때문에 reverse할 때 - 부호를 처리하는 점
2. 2의 31제곱 이상, -2의 31제곱 이하 그리고 0은 꼭 0를 return해야 한다는 점
이었습니다.

이 부분들만 고려하면서 코드를 짜면 쉽게 짤 수 있었습니다.

1️⃣ 번째 방법

저는 위에 있는 부분들을 처리하기 위해서 if문을 통해 두 가지 조건으로 나눴습니다.
첫 번째는 0보다 큰 수가 들어오는 부분, 두 번째는 0보다 작은 수가 들어오는 부분으로 했어요.
0은 처음에 들어왔을 때, guard를 통해서 처리했습니다.

x가 0보다 클 땐
일단 수를 reverse하고 Int로 변환합니다. 그리고 변환된 수가 2의 31제곱 이상이면 0를 return해주고 아니면 해당 수를 return 합니다.

x가 0보다 작을 땐
수에서 -를 제외하고 reverse를 시킨 후 Int로 변환합니다. 그리고 변환된 수에 -를 붙인 값이 -2의 31제곱 이하면 0를 return하고 아니면 해당 수를 return합니다.

func reverse(_ x: Int) -> Int {
    guard x != 0  else { return 0 }
    
    if x > 0 {
        let reverse = String("\(x)".reversed())
        
        if let reverse = Int(reverse) {
            guard reverse < Int(pow(2.0, 31)) else { return 0 }
            return reverse
        }
        return 0
    } else {
        let reverse = String("\(-x)".reversed())
        
        if let reverse = Int(reverse) {
            guard -reverse > Int(pow(-2.0, 31)) else { return 0 }
            return -reverse
        }
        return 0
    }
}

Runtime은 4ms정도 걸렸습니다.

2️⃣ 번째 방법

2번째 방법도 1번째 방법과 비슷한 형태로 짜여져 있습니다.
다른점이 있다면 첫번째는 if문을 사용해서 음수, 양수를 나눴다면 2번째 방법은 isNegative라는 Boolean값을 만들어서 음수일 때의 처리를 따로 했습니다.

그리고 reversed()라는 함수를 사용하지 않고 for문을 돌려서 character를 하나씩 받아서 처리를 해줬습니다.

func reverse(_ x: Int) -> Int {
        var stringNum = String(x)
        var newStr = ""
        var isNegative = false
        
        for char in stringNum {
            if char == "-" {
                isNegative = true
                continue
            }
            newStr = "\(char)" + newStr
        }
        
        if isNegative {
            newStr = "-" + newStr
        }
        
        guard let numToReturn = Int(newStr) else { return 0}
        if (numToReturn > 2147483647) || (numToReturn < -2147483648) { return 0}
        return numToReturn
}

요정도의 시간이 나오긴 하는데, 1번째 방법도 그렇고 Runtime이 계속 바뀌더라구요.
0~8ms를 왔다갔다 하는 거 같습니다.

profile
더 멋진 iOS 개발자를 향해

0개의 댓글