백준 웹사이트 "2577번 - 숫자의 개수" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#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씩 출력하면, 원하는 출력 결과가 얻어집니다.
반응형
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 1546번 - 평균 (0) | 2022.01.02 |
---|---|
[백준/C언어] 3052번 - 나머지 (0) | 2022.01.01 |
[백준/C언어] 2562번 - 최댓값 (0) | 2021.12.31 |
[백준/C언어] 10818번 - 최소, 최대 (3) | 2021.12.30 |
[백준/C언어] 1110번 - 더하기 사이클 (0) | 2021.12.29 |