본문 바로가기

알고리즘풀이

LeetCode: Plus One

문제설명

  • 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]

'알고리즘풀이' 카테고리의 다른 글

LeetCode: Largest Unique Number  (0) 2021.04.05
LeetCode: MoveZeroes  (0) 2021.04.02
LeetCode: Intersection of Two Arrays II  (0) 2021.03.31
LeetCode: Single Number  (0) 2021.03.30
LeetCode: Contains Duplicate  (0) 2021.03.30