Leetcode [Math] 258. Add Digits [Easy]
in CodingTest
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, +)
}
}
accept 처리 되었습니다.