문제설명
- 10진수로 구성된 길이가 1 이상인 배열이 주어졌을 때 이 배열은 하나의 정수로 표현된다.
- 이 정수의 값을 1을 더한 정수를 배열로 반환하라
- 최상위 수(most significant digit)는 배열의 가장 앞에 위치한다.
- 이 정수는 0이 아닌 경우를 제외하고, 0으로 시작하지 않는다.
문제풀이
- 결과를 저장할 배열을 선언한다. 이 배열에 값을 거꾸로 저장하고 뒤집어서 반환한다.
- 배열을 순회하며 각 위치의 값을 나타내는
val
변수와 자리 옮김 수 carry
를 선언한다.
val
변수는 carry
값과 함께 더해져 10 이상일 수도 있다. 결과 배열에 넣기 전에 10으로 나눈 나머지 값을 넣는다.
carry
변수는 10으로 나눈 몫이다.
- 999에 1을 더하여 1000이 되는 것처럼, 자리수가 하나 더 늘어날 수 있으므로, 배열을 모두 순회하고
carry
를 검사한다.
func plusOne(_ digits: [Int]) -> [Int] {
var result = [Int]()
let size = digits.count
var val = digits[size-1] + 1
result.append(val % 10)
var carry = val / 10
for i in 1..<size {
val = digits[size-1-i] + carry
carry = val / 10
val = val % 10
result.append(val)
}
if carry == 1 {
result.append(1)
}
return result.reversed()
}
print(plusOne([1,2,3])) //[1,2,4]
print(plusOne([9])) //[1,0]
print(plusOne([0])) //[1]