2577번: 숫자의 개수
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.
www.acmicpc.net
자릿수를 자르는 기본적인 알고리즘과, 배열 인덱스를 이용한 개수 세는 방법을 안다면 간단히 풀 수 있는 문제입니다.
자릿수를 자르는 기본적인 알고리즘부터 봅시다.
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";
}
+ 이 문제를 풀고 기수정렬에 대해 알아보면 좋을 것 같네요.
댓글