Daily LeetCode Challenge - 258. Add Digits

Min Young Kim·2023년 4월 26일
0

algorithm

목록 보기
129/198

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
        }
    }
}
profile
길을 찾는 개발자

0개의 댓글