Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 숫자 N의 회전 중 홀수와 짝수 개수 구하기

숫자 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(자릿수) 시간 복잡도로 문제를 효율적으로 해결할 수 있습니다.