Codewars 문제풀기 (03/08)
Sum of Digits / Digital Root
-
자연수 n을 인자로 받는다.
-
n의 각 digit를 더한다.
-
더한 값이 2 digit 이상이라면 다시 각 digit을 더한다
-
최종 합이 1 digit이 될때 까지 반복하고 최종 1 digit을 반환한다.
-
digital_root(16) –> 1 + 6 –> 7
-
digital_root(942) –> 9 + 4 + 2 –> 15 –> 1 + 5 –> 6
-
digital_root(132189) –> 1 + 3 + 2 + 1 + 8 + 9 –> 24 –> 2 + 4 –> 6
1. Test를 만들었다
-
파라미터가 1digit일때
그냥 입력한 자연수 n을 리턴하면되겠다.
public static int digital_root(int n) { return n; }
-
파라미터가 2digit 이상일 때
각 digit를 더하는 부분을 메소드로 추출해서 결과가 1 digit가 나올때까지 반복하면되겠다.
public static int digital_root(int n) { int result = n; while (result > 9) { result = splitDigitAndAddEachDigit(result); } return result; } private static int splitDigitAndAddEachDigit(int n) { int sum = 0; while (n > 0) { sum += n % 10; n /= 10; } return sum; }
- Success, 리팩토링 할게 더 없어 보여서 그냥 제출했다.
2. 답 비교, 느낀점
Best Practice 가장 많이 받은 코드
public static int digital_root(int n) {
return (n != 0 && n%9 == 0) ? 9 : n % 9;
}
- 갑자기 한줄로 답이나와서 놀랬는데 직접 계산해보니 모든 답들은 9의 나머지로 나왔다. 이런답을 보면 항상 신기하다..
내 답과 가장 비슷한 코드
public static int digital_root(int n) {
if (n < 10)
return n;
int dr = 0;
while (n >= 1) {
dr += n % 10;
n = n / 10;
}
return digital_root(dr);
}
- 다 같은데 이 답은 재귀함수를 이용해서 풀었다. 이 방법도 괜찮은것 같다.
3. 궁금한거 공부
- 없음
댓글남기기