https://www.acmicpc.net/problem/2577
문제 해결 Tip
1.몫과 나머지의 개념을 활용해 오른쪽에서부터 숫자를 체크하는 방식으로 함
ex ) 17,037,300의 값은 오른쪽에서부터 0 -> 0 -> 3 -> 7 -> 3 -> 0 -> 7 -> 1
*몫과 나머지의 개념을 활용하여 각 자리의 숫자를 추출하였기 때문에 오른쪽부터 숫자를 체크한 것임
ex) 157를 10으로 나누면 몫은 15 , 나머지는 7
다시 15를 10으로 나누면 몫은 1 나머지는 5
1 > 5 > 7
이 아이디어를 통해 각자리의 수를 순차적으로 셀 수 있음.
2. arr = 0 , arr[0] 을 구분했는데, 굳이 구분 안 하고 arr [10] = { 0 ,};으로 초기화하고 사이클 돌 때마다
arr[나머지] = arr [나머지] + 1 ; 로도 문제를 풀 수 있으니 나처럼 구분하는 것이 꼭 정답은 아님
3.while (Total >0) 이라고 제한을 걸어뒀는데, Total이 마지막에 1자리가 남고 이는 다시 10으로 나누면 몫인
Total = 0 이 나오는 것을 이용해 종료하였다.
#include<stdio.h>
int main() {
int A, B, C; //입력값 A , B , C
int Total; // A * B * C
int arr0 = 0; //배열의 0번째 , 0으로 초기화
int arr1 = 0; //배열의 1번째 , 0으로 초기화
int arr2 = 0; //배열의 2번째 , 0으로 초기화
int arr3 = 0; //배열의 3번째 , 0으로 초기화
int arr4 = 0; //배열의 4번째 , 0으로 초기화
int arr5 = 0; //배열의 5번째 , 0으로 초기화
int arr6 = 0; //배열의 6번째 , 0으로 초기화
int arr7 = 0; //배열의 7번째 , 0으로 초기화
int arr8 = 0; //배열의 8번째 , 0으로 초기화
int arr9 = 0; //배열의 9번째 , 0으로 초기화
int arr[10]; //배열 생성
scanf("%d",&A);
scanf("%d",&B);
scanf("%d",&C);
Total = A * B * C;
while (Total > 0)
{
if (Total % 10 == 0)
{
Total = Total / 10;
++arr0;
}
if (Total % 10 == 1)
{
Total = Total / 10;
++arr1;
}
if (Total % 10 == 2)
{
Total = Total / 10;
++arr2;
}
if (Total % 10 == 3)
{
Total = Total / 10;
++arr3;
}
if (Total % 10 == 4)
{
Total = Total / 10;
++arr4;
}
if (Total % 10 == 5)
{
Total = Total / 10;
++arr5;
}
if (Total % 10 == 6)
{
Total = Total / 10;
++arr6;
}
if (Total % 10 == 7)
{
Total = Total / 10;
++arr7;
}
if (Total % 10 == 8)
{
Total = Total / 10;
++arr8;
}
if (Total % 10 == 9)
{
Total = Total / 10;
++arr9;
}
arr[0] = arr0;
arr[1] = arr1;
arr[2] = arr2;
arr[3] = arr3;
arr[4] = arr4;
arr[5] = arr5;
arr[6] = arr6;
arr[7] = arr7;
arr[8] = arr8;
arr[9] = arr9;
}
for (int i = 0; i <= 9; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 백준 1546번 (0) | 2021.08.31 |
---|---|
C언어 백준3052 해설 (0) | 2021.08.31 |
백준 1110번 C언어 해설 (0) | 2021.08.21 |
백준 2741번 c언어 해설 코드 (0) | 2021.08.14 |
백준 15552번 해설 (0) | 2021.08.11 |