https://www.acmicpc.net/problem/2577
🔎해결 방법
일단 세 수를 입력받고 모두 곱한 결과를 product 변수에 저장한다.
product를 10으로 나눈 나머지를 인덱스로 하는 num 배열의 값을 1 증가시키고
그 과정을 계속 반복한다.
언제까지?
product를 10으로 나눈 몫이 0이 아닐 때까지!
그럼 while문을 다 돌고 나오면 최고 자리 수는 아직 카운트 되지 못한 상태이기 때문에
마지막으로 최고 자리 수를 인덱스로 하는 num 배열의 값을 증가시켜주면 된다!
💡내 코드(C)
ver.1
// [2577] 숫자의 개수
// https://www.acmicpc.net/problem/2577
#include <stdio.h>
int main(void)
{
int a, b, c, product;
int num[10] = { 0 };
scanf("%d %d %d", &a, &b, &c);
product = a * b * c;
while(product / 10) {
num[product % 10]++;
product /= 10;
}
num[product]++;
for(int i = 0 ; i < 10 ; i++) {
printf("%d\n", num[i]);
}
}
ver.2
/* 숫자의 개수 */
#include <stdio.h>
int main(void)
{
int arr[10]; /*0~9까지의 숫자가 몇 번 쓰였는지 저장할 배열*/
int nf, nl = 1; /*원래 수 / 일의 자리 수*/
int a, b, c, result;
for (int i = 0; i < 10; i++) /*★배열 초기화 무조건!★*/
arr[i] = 0;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
result = a * b * c;
nf = result;
while (nf != 0) {
nl = nf % 10;
nf = nf / 10;
switch (nl) {
case 0 :
arr[0]++;
break;
case 1 :
arr[1]++;
break;
case 2 :
arr[2]++;
break;
case 3 :
arr[3]++;
break;
case 4 :
arr[4]++;
break;
case 5 :
arr[5]++;
break;
case 6 :
arr[6]++;
break;
case 7 :
arr[7]++;
break;
case 8 :
arr[8]++;
break;
case 9 :
arr[9]++;
break;
}
}
for (int i = 0; i < 10; i++)
printf("%d\n", arr[i]);
}
반응형
'Baekjoon > 수학' 카테고리의 다른 글
[2775] 부녀회장이 될테야 (0) | 2020.04.04 |
---|---|
[2908] 상수 (0) | 2020.04.04 |
[1076] 저항(C) (0) | 2020.04.01 |
[2442] 별 찍기 - 5 (0) | 2020.04.01 |
[2292] 벌집(C/C++) (0) | 2020.03.30 |