본문 바로가기

문제풀이/C++

[C++] 가장 많이 사용된 자릿수

728x90

[목적]

자연수 N이 입력되면 N이 가지고 있는 자릿수 중 가장 많이 사용된 숫자를 출력한다.
단, 가장 많이 사용된 숫자가 여럿일 경우 가장 큰 수를 출력한다.
또한 N의 길이는 100자를 넘지 않는다.

 

[입력예제]

1230565625

 

[출력예제]

5

 

자연수 '1230565625'의 자릿수 중 0은 1개, 1은 1개, 2는 2개, 3은 1개, 5는 3개, 6은 2개로 5가 가장 많으니 5를 출력한다.


[코드]

#include <iostream>

using namespace std;

int main(void) {
	
    int cnt[10]={0}, a = 0, res=0, max = -2147000000;
	string num;
    
    cin >> num;
	
    for(int i=0; i<num.size(); i++){ //size() = string 변수의 길이를 반환
        a = num[i]-48;
        cnt[a]++;
    }
    
    for(int i = 0; i<10; i++){
        if(cnt[i] >= max) {
            max = cnt[i];
            res = i;
        }
    }
    
    cout << res;
    
    return 0;
}

1. 숫자를 string으로 입력받는다. (자연수 100자리 까지 받아야 하기에 int형을 쓸 수 없음)

2. num에 담긴 문자인 숫자를 아스키코드를 이용해 숫자로 만든다.

3. 해당 숫자를 카운트 해준다.

4. num의 사이즈만큼 2와 3번을 반복한다.

5. 카운트 배열에 담긴 숫자들을 비교하여 가장 큰 카운트 값을 가진 숫자를 찾아내 출력한다.

 

숫자 카운트가 같을 경우 가장 큰 숫자를 출력해야 하기에 0부터 시작한 for문으로 인해 cnt[i]와 max의 조건에 '='이 붙게된다.

더보기

num을 int형으로 만들고 %연산을 통해 1의 자리 수를 알아와 카운트 한 후 숫자를 10으로 나눠가며 카운트 배열을 만들었는데 이때 입력받는 num이 int형을 넘어선 경우 제대로 된 결과가 나오지 않은것을 확인 할 수 있었다.

※ 큰 숫자를 받는 경우도 생각하여야 하기에 string이나 char형으로 만들어 줘야 한다.

 

[실행 결과]

728x90
반응형

'문제풀이 > C++' 카테고리의 다른 글

[C++] 소수의 개수  (0) 2021.01.01
[C++] 뒤집은 소수  (0) 2020.12.30
[C++] 숫자의 총 개수 (small)  (0) 2020.12.29
[C++] 자릿수의 합  (0) 2020.12.28
[C++] 모두의 약수  (0) 2020.12.27