프로그래밍 언어/C

C언어 백준 2577번 해설

happy_life 2021. 8. 25. 12:33

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

 

 

 

2577번: 숫자의 개수

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

www.acmicpc.net

 

 

 문제 해결 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