본문 바로가기

백준/C

[BaeKJoon/C] 백준21567 c 숫자의 개수 2

반응형

https://www.acmicpc.net/problem/21567

 

21567번: 숫자의 개수 2

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 1,000,000보다 작은 자연수이다.

www.acmicpc.net

 

문제

세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

 

풀이

  1. 일단 3개의수를 입력할수 있는 변수를 선언하고 3개의 수를 곱하는  mul도 선언한다. (곱하기를 선언할때는) mul=1;로 선언
  2. 0부터 9까지 각각의 숫자가 몇번씩 쓰였는지 구하기 위해서 10개의 방이 있는 배열을 선언한다. = arr[10]={0, };
  3. 어떤숫자를 몇번 쓰였는지 알아야하기 때문에 mul값을 0이 될때까지 %10으로 1의자리를 구한다.
  4. 1의 자리를 아까 쓰였던 arr[10]방에 같은 숫자끼리 방으로 들어간다.
  5. %10으로 1의 자리를 구했으면 10의자리의 숫자를 더하기 위해 mul값을 0이 될때 까지 10으로 나눠주고 %10을 해주고 그값을 re=0으로 선언해준다.
  6. 0부터 9까지 10개의 출력을 보여줘야하기 때문에 따로 for문을 만들어 10개의 출력을 보여주게 만든다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int main() {
    int arr[10= { 0, };            // 풀이 2
    int a[3];                         // 풀이 1
    long long mul = 1;          
    /* long long으로 선언한 이유는 예제입력3에서 곱한 값이 int로 표현하는 범위를 초과했기때문에 
    젤 큰 정수값을 표현하는 long long 값으로 선언한다.*/
    int re = 0;
    for (int i = 0; i < 3; i++) {
        scanf("%d"&a[i]);
        mul *= a[i];
    }
    for (int i = 0; mul > 0; i++) {
        re = mul % 10;                    // 풀이 3,5
        arr[re] += 1;                        // 풀이 4
        mul /= 10;                         // 풀이 5
    }
    for (int i = 0; i < 10; i++)       // 풀이 6
        printf("%d\n", arr[i]);
}
cs
 

 

https://www.acmicpc.net/problem/21567

 

21567번: 숫자의 개수 2

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 1,000,000보다 작은 자연수이다.

www.acmicpc.net

 

반응형