백준 #33 [C] 2577. 숫자의 개수, 배열

K Choi·2022년 3월 12일
0

백준

목록 보기
33/37
post-thumbnail

❔문제: 백준 2577

세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

➡️ 입력

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

⬅️ 출력

첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

예제 입력 1

150
266
427

예제 출력 1

3
1
0
2
0
0
0
2
0
0

✍️풀이

으음.. 어떻게 해야 할지 모르겠다😥

일단 내가 생각한 과정은 >>
A, B, C 각각에 숫자 하나씩 입력
-> 이 3개 숫자의 곱을 mul에 저장
-> mul이 만약 6000이라면 6, 0, 0, 0을 각각 배열의 원소로 받고
-> 배열 내에서 0~9까지 각각 몇 개가 있는지 세기

이렇게인데 숫자의 각 자릿수를 어떻게 배열 원소로 저장해야 할지
감이 안 와서 내 머리에 없는 지식이겠거니 하고 구글링을 시작했지만
내가 찾고자 하는 정보를 찾기가 너무 힘들다ㅠ

해결책

1️⃣ 긴 검색 끝에 'c 숫자를 배열로' 검색어를 통해 한 질문글 발견!
결국 sprintf()라는 함수를 사용하면 되는 거였음!

2️⃣ 코드 작성하다보니 문자 배열을 숫자 형태로 바꾸면 좋겠다는
생각이 들었는데 분명 방법이 있을 것 같았다.
정수 형태의 문자열을 정수로 변환하기 글에서 필요한 정보를 얻을 수 있었다.

C 코드

#include <stdio.h>
int main() {
    int A, B, C, mul;
    char M[9];
    scanf("%d", &A);
    scanf("%d", &B);
    scanf("%d", &C);
	int mul = A*B*C;
	for (i=0; i<9; i++) { 
		scanf("%s". M);
	}
	for (i=0; i<9; i++) {
		printf("%s", M[i]);
	}
    return 0;
}

진짜 긴긴 고민 끝에 작성한 코드가 정상적으로 돌아갈 때의 희열은...👍

이 문제의 C++코드는 다음 글로!

profile
mbeCoder

0개의 댓글