문제 개요
하나의 정수가 주어졌을 때, 그 수를 이루는 각 자릿수 가운데 짝수와 홀수가 각각 몇 개인지 세는 것이 이번 문제의 목표입니다. 나아가 짝수 자릿수는 짝수 번, 홀수 자릿수는 홀수 번 나타나는지까지 함께 확인해야 합니다.
예시
입력 − digit = 12345 출력 − 짝수 자릿수 개수 = 2 홀수 자릿수 개수 = 3
설명 − 짝수 자릿수(2, 4)가 총 2번, 즉 짝수 번 나타나고 홀수 자릿수(1, 3, 5)가 총 3번, 즉 홀수 번 나타나므로 조건을 만족합니다.
입력 − digit = 44556 출력 − 짝수 자릿수 개수 = 3 홀수 자릿수 개수 = 2
설명 − 짝수 자릿수(4, 4, 6)가 3번, 즉 홀수 번 나타나고 홀수 자릿수(5, 5)가 2번, 즉 짝수 번 나타나므로 조건을 만족하지 않습니다.
풀이 접근 방법
- 짝수 자릿수와 홀수 자릿수를 포함하는 정수 값을 입력받습니다.
- 짝수 자릿수를 세는 변수와 홀수 자릿수를 세는 변수 두 개를 선언하고 0으로 초기화합니다.
- 숫자가 0보다 큰 동안 반복문을 실행하면서
n / 10으로 값을 줄여가며 한 자릿수씩 추출합니다. - 추출한 자릿수를 2로 나누었을 때 나머지가 0이면 짝수, 그렇지 않으면 홀수로 판별합니다.
- 자릿수가 짝수이면 짝수 카운트를 1 증가시키고, 홀수이면 홀수 카운트를 1 증가시킵니다.
- 짝수 자릿수가 짝수 번 나타났는지 확인하려면 짝수 카운트를 2로 나눈 나머지가 0인지 검사합니다.
- 홀수 자릿수가 홀수 번 나타났는지 확인하려면 홀수 카운트를 2로 나눈 나머지가 0이 아닌지 검사합니다.
- 최종 결과를 출력합니다.
예제 코드
#include <iostream>
using namespace std;
int main(){
int n = 12345, e_count = 0, o_count = 0;
int flag;
while (n > 0){
int rem = n % 10;
if (rem % 2 == 0){
e_count++;
} else {
o_count++;
}
n = n / 10;
}
cout << "Count of Even numbers : " << e_count;
cout << "\nCount of Odd numbers : " << o_count;
// 짝수 개수는 짝수이고 홀수 개수는 홀수인지 확인
if (e_count % 2 == 0 && o_count % 2 != 0){
flag = 1;
} else {
flag = 0;
}
if (flag == 1){
cout << "\nYes " << endl;
} else {
cout << "\nNo " << endl;
}
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Count of Even numbers : 2 Count of Odd numbers : 3 Yes
12345에는 짝수 자릿수가 2개(2, 4), 홀수 자릿수가 3개(1, 3, 5) 있으므로 ‘짝수 개수는 짝수, 홀수 개수는 홀수’라는 조건을 충족하여 Yes가 출력됩니다.