숫자 N이 주어졌을 때, N의 모든 회전(rotation) 결과 중 홀수가 되는 경우의 수와 짝수가 되는 경우의 수를 구하는 것이 목표입니다. 예를 들어 N이 123이라면 회전 결과는 123, 321, 132의 세 가지입니다. 이 가운데 홀수는 123과 321로 총 2개이고, 짝수는 132로 1개입니다.
예제로 이해하기
입력 − N = 54762
출력
홀수인 회전의 개수 − 2
짝수인 회전의 개수 − 3
설명 − 회전 결과는 다음과 같습니다.
54762, 25476, 62547, 76254, 47625
짝수 회전은 3개 − 54762, 25476, 76254
홀수 회전은 2개 − 62547, 47625
입력 − N = 3571
출력
홀수인 회전의 개수 − 4
짝수인 회전의 개수 − 0
설명 − 회전 결과는 다음과 같습니다.
3571, 1357, 7135, 5713
짝수 회전은 0개
홀수 회전은 4개 − 3571, 1357, 7135, 5713
적용된 접근 방식
어떤 숫자가 홀수인지 짝수인지는 일의 자리 숫자만 보면 판별할 수 있습니다. 숫자를 회전하면 모든 자릿수가 한 번씩 일의 자리에 오게 되므로, 각 자릿수를 하나씩 확인하면서 짝수라면 짝수 카운트를, 홀수라면 홀수 카운트를 증가시키면 됩니다. 이를 위해 숫자를 10으로 나누어가며 일의 자리 값을 검사하는 방식을 사용합니다.
숫자를 정수 N으로 입력받습니다.
Even_Odd_rotation(int N) 함수는 숫자 N을 받아 홀수 회전과 짝수 회전의 개수를 출력합니다.
초기 카운트 값으로 Even_rotation과 Odd_rotation을 선언합니다.
do-while 루프 안에서 value = N % 10으로 일의 자리 숫자를 구합니다.
value % 2 == 0이면 짝수이므로 Even_rotation을 증가시키고, 그렇지 않으면 Odd_rotation을 증가시킵니다.
N을 10으로 나누어 다음 자릿수를 확인할 준비를 합니다.
Even_rotation을 짝수 회전의 개수로 출력합니다.
Odd_rotation을 홀수 회전의 개수로 출력합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
void Even_Odd_rotation(int N){
int Even_rotation = 0;
int Odd_rotation = 0;
do{
int value = N % 10;
if(value % 2 == 1)
{ Odd_rotation++; }
else
{ Even_rotation++; }
N = N / 10;
} while(N != 0);
cout<<"Count of rotations of N which are Odd are: "<<Odd_rotation;
cout<<"\nCount of rotations of N which are Even are: "<<Even_rotation;
}
int main(){
int N = 341;
Even_Odd_rotation(N);
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다 −
Count of rotations of N which are Odd are: 2
Count of rotations of N which are Even are: 1
이처럼 각 자릿수의 홀짝 여부만 확인하면 별도의 회전 연산 없이도 O(자릿수) 시간 복잡도로 문제를 효율적으로 해결할 수 있습니다.