주어진 숫자에서 홀수 자릿수의 합과 짝수 자릿수의 합 사이의 차이를 구하는 문제입니다. 즉, 숫자를 구성하는 모든 자릿수를 확인하여 짝수와 홀수로 나눈 뒤, 각각의 합을 계산하고 그 차이를 구합니다.
예시
입력: 12345 출력: 3
설명
홀수 자릿수의 합: 1 + 3 + 5 = 9 짝수 자릿수의 합: 2 + 4 = 6 홀수 합 − 짝수 합 = 9 − 6 = 3
풀이 방법
숫자에서 한 자릿수씩 추출한 후, 해당 자릿수가 짝수인지 홀수인지 판별합니다. 짝수라면 짝수 합에 더하고, 그렇지 않다면 홀수 합에 더합니다. 마지막으로 두 합의 차이를 구하면 됩니다.
- 자릿수 추출: 나머지 연산(
% 10)을 사용해 숫자의 마지막 자릿수를 얻습니다. - 짝수·홀수 판별: 추출한 자릿수를 2로 나눈 나머지가 0이면 짝수, 아니면 홀수로 분류합니다.
- 합계 누적: 각각의 변수(even, odd)에 자릿수 값을 더해 누적합니다.
- 자릿수 제거: 숫자를 10으로 나누어(
/= 10) 이미 처리한 자릿수를 제거합니다. - 차이 계산: 반복이 끝나면 홀수 합에서 짝수 합을 뺀 값을 출력합니다.
C++ 코드 예제
#include <iostream>
using namespace std;
int main() {
int n, r = 0;
int diff = 0;
int even = 0;
int odd = 0;
n = 12345;
while(n != 0){
r = n % 10; // 마지막 자릿수 추출
if(r % 2 == 0) {
even += r; // 짝수 합에 누적
} else {
odd += r; // 홀수 합에 누적
}
n /= 10; // 처리한 자릿수 제거
}
diff = odd - even; // 두 합의 차이 계산
printf("%d", diff);
return 0;
}코드 설명 및 실행 결과
위 코드는 n = 12345를 대상으로 동작하며, while 루프가 한 번 실행될 때마다 숫자의 마지막 자릿수를 하나씩 검사합니다. 모든 자릿수(5, 4, 3, 2, 1)를 처리하고 나면 odd 변수에는 9(= 1+3+5), even 변수에는 6(= 2+4)이 저장되고, 최종적으로 3이 출력됩니다.
이 알고리즘은 자릿수의 개수에 비례하여 반복하므로 시간 복잡도는 O(log₁₀ n), 추가 메모리 없이 몇 개의 변수만 사용하므로 공간 복잡도는 O(1)입니다.