본문 바로가기

코딩/백준 BOJ

[백준/C언어] 2577번 - 숫자의 개수

백준 웹사이트 "2577번 - 숫자의 개수" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

2577번: 숫자의 개수

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

www.acmicpc.net


소스 코드

#include <stdio.h>

int main(void){
    int A, B, C;
    scanf("%d %d %d", &A, &B, &C);
    
    int product = A*B*C;
    int digits[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    while(product>0){
        int digit = product%10;
        digits[digit] = digits[digit] + 1;
        product = product / 10;
    }

    for(int i=0; i<10; i++){
        printf("%d\n", digits[i]);
    }
}

문제 풀이

  세 숫자를 곱했을 때, 그 곱을 구성하는 숫자들의 개수를 구하는 문제입니다. 1차원 배열을 이용하면 쉽게 풀 수 있는데, 크기가 10인 배열을 선언하면 0~9의 index가 곧 가능한 모든 한 자리 숫자입니다. 따라서 각 자리 숫자들을 확인해보고, 해당하는 숫자를 index로 가지는 배열에 표시해주면 됩니다.

  Line 9 ~ 13의 while문을 통해 곱(product)의 각 자리 숫자를 확인할 수 있습니다. 10으로 나눈 나머지를 통해 1의 자리 숫자를 확인하고 저장합니다. 10으로 나눈 몫을 다시 product에 저장하고, while문을 반복함으로써 모든 자리들을 확인하게 됩니다. 가장 높은 자릿수를 확인하면, 한 자리 숫자일테니 10으로 나누었을 때의 몫은 0이 되고 product에도 0이 저장됩니다. 이는 while문이 반복될 조건 product>0에 어긋나므로 while문을 빠져나가게 되지요.

  마지막으로 배열 digits를 한 index씩 출력하면, 원하는 출력 결과가 얻어집니다.

 

반응형