Problem From.
https://leetcode.com/problems/add-digits/
오늘 문제는 num 이 주어질때, 그 num 의 각 자리수를 계속 더해나가는걸 반복해서 한 자리수가 될때 그 숫자를 반환하는 문제였다.
이 문제는 digital sum 이라고 부르는 개념을 사용할 수 있는데, 각 자리수를 계속 더해서 나오는 값이 한자리가 되는 값은 원래 숫자를 9로 나눈 나머지와 같다는 정리를 사용할 수 있다.
(참조 - https://en.wikipedia.org/wiki/Digital_root)
원본 풀이 O(n)
class Solution {
fun addDigits(num: Int): Int {
var modNum = num.toString()
while(modNum.length != 1) {
var cnt = 0
modNum.forEach {
cnt += it.toString().toInt()
}
modNum = cnt.toString()
}
return modNum.toInt()
}
}
정리를 이용하여 O(1) 의 시간에 풀어낸 풀이
class Solution {
fun addDigits(num: Int): Int {
return when {
num == 0 -> 0
num % 9 == 0 -> 9
else -> num % 9
}
}
}