728x90
자릿수를 자르는 기본적인 알고리즘과, 배열 인덱스를 이용한 개수 세는 방법을 안다면 간단히 풀 수 있는 문제입니다.
자릿수를 자르는 기본적인 알고리즘부터 봅시다.
9876이라는 숫자가 있다면
9876 % 10 = 6
9876 / 10 = 987
987 % 10 = 7
987 / 10 = 98
98 % 10 = 8
98 / 10 = 9
9 % 10 = 9
9 / 10 = 0
0은 더 이상 연산할 수 없으므로 끝
> 자릿수 자르기 코드
while(n) {
n%10;
n/=10;
}
배열 인덱스를 이용한 개수 세는 방법을 봅시다.
아까 잘라놓은 6, 7, 8, 9로 예시를 들어볼게요.
<기본 상태>
숫자의 개수: 0 0 0 0 0 0 0 0 0 0
각 숫자: 0 1 2 3 4 5 6 7 8 9
<6의 개수를 센 후>
숫자의 개수: 0 0 0 0 0 0 1 0 0 0
각 숫자: 0 1 2 3 4 5 6 7 8 9
<7의 개수를 센 후>
숫자의 개수: 0 0 0 0 0 0 1 1 0 0
각 숫자: 0 1 2 3 4 5 6 7 8 9
<8의 개수를 센 후>
숫자의 개수: 0 0 0 0 0 0 1 1 1 0
각 숫자: 0 1 2 3 4 5 6 7 8 9
<9의 개수를 센 후>
숫자의 개수: 0 0 0 0 0 0 1 1 1 1
각 숫자: 0 1 2 3 4 5 6 7 8 9
위의 자릿수 자르기와 개수 세는 것을 합치면 완성입니다.
#include <iostream>
using namespace std;
int main() {
int a, b, c, n, num[10]{};
cin >> a >> b >> c;
n = a * b * c;
while(n) {
num[n%10]++;
n/=10;
}
for(int i=0; i<10; i++)
cout<<num[i]<<"\n";
}
+ 이 문제를 풀고 기수정렬에 대해 알아보면 좋을 것 같네요.
728x90
댓글