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

C++로 숫자 안에서 특정 자릿수의 빈도 구하는 방법


이 글에서는 하나의 정수 안에 특정 자릿수가 몇 번 등장하는지, 즉 빈도(frequency)를 구하는 방법을 살펴보겠습니다. 예를 들어 주어진 수가 12452321이고 찾으려는 자릿수 D = 2라고 한다면, 2는 세 번 나타나므로 빈도는 3이 됩니다.

이 문제는 아주 단순한 아이디어로 해결할 수 있습니다. 먼저 수의 가장 뒤쪽 자릿수(일의 자리)를 하나씩 가져온 뒤, 그 값이 찾고자 하는 자릿수 d와 같은지 비교합니다. 같다면 카운터 값을 1 증가시킵니다. 그다음 수를 10으로 나누어 마지막 자릿수를 제거하고, 수가 모두 소진될 때까지(0이 될 때까지) 이 과정을 반복하면 전체 자릿수를 한 번씩 검사할 수 있습니다.

예제 코드

#include<iostream>
using namespace std;
int countDigitInNum(long long number, int d) {
   int count = 0;
   while(number){
      if((number % 10) == d)
         count++;
      number /= 10;
   }
   return count;
}
int main () {
   long long num = 12452321;
   int d = 2;
   cout << "Frequency of " << 2 << " in " << num << " is: " << countDigitInNum(num, d);
}

실행 결과

Frequency of 2 in 12452321 is: 3

위 코드에서 number % 10 연산으로 일의 자리 숫자를 추출하고, number /= 10 연산으로 이미 확인한 자릿수를 제거합니다. while 루프는 남은 수가 0이 되면 종료되며, 최종적으로 카운터에는 해당 자릿수가 등장한 횟수가 저장됩니다. 이 알고리즘은 수의 자릿수만큼 반복하므로 시간 복잡도는 O(log₁₀N)으로 매우 효율적입니다.