Leetcode [Math] 258. Add Digits [Easy]

258. Add Digits


Given an integer num, repeatedly add all its digits until the result has only one digit, and return it.

Example 1:

Input: num = 38
Output: 2
Explanation: The process is
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
Since 2 has only one digit, return it.

Example 2:

Input: num = 0
Output: 0

Constraints:

  • 0 <= num <= 2³¹ - 1

Follow up: Could you do it without any loop/recursion in O(1) runtime?


  • 문제 설명
  • 0 ≤ num ≤ 2³¹-1 범위의 숫자가 입력되면, 숫자 하나씩 구분하여 서로 더하고, 다시 또 더해서 숫자값이 한자리가 나오는 sum 값을 리턴하면 되는 문제입니다.

  • 문제 풀이
  • 숫자를 숫자배열로 변경해주는 함수와, 숫자배열의 각각의 합을 리턴해주는 함수를 생성합니다.
  • 숫자를 배열로 변경한 후 배열의 합을 리턴받아 그 합이 한자리가 될떄까지 반복하며, 한자리가 되면 해당 합을 리턴합니다.

swift 코드는 아래와 같습니다.

class Solution {
    func addDigits(_ num: Int) -> Int {
        guard num != 0 else { return 0 }
        var sum = calculateSum(makeIntegerArray(num))
        while sum / 10 != 0 {
            sum = calculateSum(makeIntegerArray(sum))
        }
        return sum
    }

    private func makeIntegerArray(_ num: Int) -> [Int] {
        String(num).compactMap{Int(String($0))}
    }

    private func calculateSum(_ nums:[Int]) -> Int {
        nums.reduce(0, +)
    }
}

스크린샷 2023-04-26 오후 4.31.58.png

accept 처리 되었습니다.