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

Boknami·2022년 1월 11일
0

백준문제풀이

목록 보기
2/45

#백준 문제풀이

📑문제

세 개의 숫자를 입력하고 곱을 구한 후 1~9까지 숫자가 몇 번 나왔는지 출력!!

🤣 곤란했던 부분

1) 자릿수 세기
세 자리 숫자를 입력 받아 곱셈을 진행하면 만들어진 숫자가 최소 100 100 100 = 1,000,000 이고, 최대는 999 999 999 = 997,002,999이 나온다.

숫자 크기가 너무나 다양하게 나와서 곱셈으로 나온 변수에 자리숫자를 세어 정해진 횟수를 확인하고 처리를 하려고했다!
(🚨사실 이 부분 없이 바로 while문을 사용해서 /10을 사용하는게 맞다😅)

자릿수를 알기 위해서는 일단 10으로 나누어 주는 과정이 필요했다! 그리고 10으로 나누어 주며 만들어둔 Count변수에 ++를 해주는 방식으로 자릿수를 체크했다.

자릿수 세기 코드

while (Number > 0)
	{
		Number = Number / 10;
		Count++;
	}

2) 변수에 존재하는 숫자 갯수 저장
이 부분에서 생각을 너무 단순하게 하고 깊게 생각을 하지 않아 이상한 길로 빠져버렸다.. 10을 이용해서 나눗셈을 진행하여 나온 숫자를 단순히 one~nine까지 변수로 만들고 그 변수에다 ++를 해줄 생각을 처음에 하였으나, 변수까지 다 선언하고 나서 아무리 생각해도 이 방법은 아님을 느끼고 다시 생각을 조금 하다 인터넷을 참고하여 방법을 찾았다.

첫번째는 나온 숫자를 문자형으로 변환, 아스키 코드 사용 등에 내용이 있었는데 일단은 문제를 먼저 해결하고 싶어 간단히 읽어 이해를 하고 나눗셈과 나머지를 이용한 방법을 사용하였다.

결론적으로 배열을 사용해서 배열의 크기를 10으로 하고 0~9가 몇 번 사용되었는지 배열을 이용해서 저장을 하는 방식으로 문제를 풀면됬다.

가장 핵심이 되는 부분이 이 부분이었다!

	//!----------자릿 수 검열-----------!
	for(int i = 0 ; i < Count; i++)
	{
		Num_Ary[result % divide]++;
		result = result / 10;
	}

😮 느낀 점
이런 생각을 왜 못했는지 생각도 들고 이런 식으로 생각을 할 수 있구나 싶은 생각도 들었다. 이제 컴공 3학년이 되는 학생인데 정말 코딩에 대해서 깊게 하지 않았구나 하는 부끄러움과 자책감이 들어서 더 열심히 해야겠다고 다짐했다..😥


🧾 전체 코드
(비효율적인 부분이 매우 많다..😏)

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<stdlib.h>

int main()
{
	int A;
	int B;
	int C;
	int result;
	int Mid;
	int divide = 10;
	int Num_Ary[10] = { 0, };

	scanf("%d %d %d", &A, &B, &C);
	result = A * B * C;

	//!----------자릿수 체크-----------!
	int Count = 0;
	Mid = result;

	while (Mid > 0)
	{
		Mid = Mid / divide;
		Count++;
	}

	//!----------자릿 수 검열-----------!
	for(int i = 0 ; i < Count; i++)
	{
		Num_Ary[result % divide]++;
		result = result / 10;
	}

	//!----------출력 부분-----------!
	for (int i = 0; i <= 9; i++)
	{
		printf("%d\n", Num_Ary[i]);
	}
}

0개의 댓글