개요
이 튜토리얼에서는 주어진 숫자의 각 자릿수를 계속 더하여 최종적으로 한 자리 수가 될 때까지 반복하는 프로그램을 작성해 보겠습니다. 먼저 예제를 통해 문제를 이해해 보겠습니다.
입력 − 4543
출력 − 7
문제 해결 접근 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- 숫자를 초기화합니다.
- 합계 변수를 0으로 초기화합니다.
- 합이 9 이하가 될 때까지 반복하며, 모듈로(%) 연산자를 사용해 각 자릿수를 합계에 더합니다.
- 최종 합계를 출력합니다.
예제 코드
실제 코드를 살펴보겠습니다.
#include <bits/stdc++.h>
using namespace std;
void findTheSingleDigit(int n) {
int sum = 0;
while(n > 0 || sum > 9) {
if(n == 0) {
n = sum;
sum = 0;
}
sum += n % 10;
n /= 10;
}
cout << sum << endl;
}
int main() {
int n = 4543;
findTheSingleDigit(n);
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
7
더 간단한 방법: 디지털 루트 공식 활용
사실 이 문제는 훨씬 간단한 방법으로도 해결할 수 있습니다. 바로 디지털 루트(Digital Root)의 수학적 성질을 이용하는 것입니다.
- 주어진 숫자가 0이라면 결과는 0입니다.
- 숫자가 9로 나누어떨어진다면 결과는 9입니다.
- 그 외의 경우에는 n % 9가 곧 답이 됩니다.
이 방법은 반복문 없이 상수 시간(O(1)) 안에 답을 구할 수 있어 매우 효율적입니다.
예제 코드
코드로 확인해 보겠습니다.
#include <bits/stdc++.h>
using namespace std;
void findTheSingleDigit(int n) {
if (n == 0) {
cout << 0;
}
else if (n % 9 == 0) {
cout << 9 << endl;
}
else {
cout << n % 9 << endl;
}
}
int main() {
int n = 4543;
findTheSingleDigit(n);
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
7
마무리
이번 튜토리얼에서는 C++로 숫자를 한 자리 수가 될 때까지 자릿수를 더하는 두 가지 방법을 알아보았습니다. 반복문을 사용하는 직관적인 방법과 9의 배수 성질을 활용한 수학적 방법 모두 코딩 테스트나 실무에서 유용하게 활용될 수 있습니다. 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요.