# 문제 설명
atoi
커스텀 함수를 구현하는 문제- 앞의 공백 무시, 인덱스 오버플로우 체크
- 자릿수 계산하며 result값 계산, 32비트 최댓값 오버플로우 발생하는 경우 Int32 최소 혹은 최댓값으로 리턴
- 32비트 이상 값에 대해 대소 비교를 진행해야 하므로 Int64 타입으로 result에 저장
class Solution {
func myAtoi(_ s: String) -> Int {
var result: Int64 = 0
var sign = 1
var i = 0
var s = Array(s)
if s.isEmpty { return 0 }
while(s[i] == " ") {
i += 1
if i >= s.count { return 0 }
}
if s[i] == "-" || s[i] == "+" {
sign = s[i] == "-" ? -1 : 1
i += 1
if i >= s.count { return 0 }
}
while(i < s.count && s[i].wholeNumberValue != nil) {
result = 10 * result + Int64(s[i].wholeNumberValue!)
if result * Int64(sign) > Int32.max {
return Int(Int32.max)
} else if result * Int64(sign) < Int32.min {
return Int(Int32.min)
}
i += 1
}
return Int(result) * sign
}
}
# 쉬운 풀이
NSString
의integerValue
속성으로 추출하면 문제에서 요구하는 atoi 알고리즘과 동일하게 숫자 변환 가능
class Solution {
func myAtoi(_ s: String) -> Int {
guard !s.contains("+ ") else { return 0 }
let val = (s as NSString).integerValue
return val >= Int32.max ? Int(Int32.max) : max(Int(Int32.min), val)
}
}