관리 메뉴

有希

HackerRank/Recursive Digit Sum 본문

프로그래밍/알고리즘+코딩테스트

HackerRank/Recursive Digit Sum

有希. 2022. 4. 4. 00:54

외국인의 풀이. 잘 짜여져 있다. 철근 콘크리트 같은 느낌. 재귀는 익숙한 dfs가 아니면 언제나 어렵다.

1. 재귀 풀이에는 항상 기저 조건이 필요하다. 기저 조건은 길이가 1이면 그대로 return한다. (문제에서 말하는 super)

2. sum을 준비한다. 오버플로우 대비해서 long 선언

3. 주어진 문자열 숫자들의 합을 구한다. 그 이후 k만큼 곱해주면 된다. 굳이 문자열을 k만큼 곱해서 늘린다음 순회할 필요가 없다. 이 부분에서 깨달음을 얻었다.

4. 그리고 다시 long을 string으로 변환해서 재귀호출한다.

int superDigit(string n, int k) {
    
    if(n.length() == 1 && k == 1)
        return n[0] - '0';
        
    long sumN = 0;
    
    for(int i=0; i<n.length(); i++){
        sumN += n[i] - '0';
    }
    
    sumN *= k;
    return superDigit(to_string(sumN), 1);
}