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 |