[백준 BOJ] 2577번 숫자의 개수 (C언어)

2022. 1. 24. 17:34PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2577번: 숫자의 개수

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

www.acmicpc.net

백준 BOJ 2577번 숫자의 개수 문제 사진

 

접근 방법 - 수학적 사고력을 요구하는 문제

백준 2577번 문제는 수학적 사고력을 필요로 하는 문제이다.

해당 문제에선, 3개의 수를 곱한 수에 대해 0에서 9까지의 숫자 빈도수를 구해야 한다.

따라서 필자는 각 숫자의 빈도수를 저장하기 위해 배열을 사용하였다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

배열을 이용한 원리는 아래의 코드와 코드 설명을 참고하길 바란다.

 

코드의 실행 순서

1) 3개의 수(a, b, c) 입력받는다.

 

2) 3개의 수를 곱한 값(r)을 저장하고, cnt를 1로 초기화하며 선언한다.

(여기서 cnt는 r의 각 자릿수를 추출하는 데에 사용하는 변수이다.)

 

3) 일의 자릿수부터 시작해서 각 자릿수를 추출하여, 숫자의 빈도수 측정을 한다.

- cnt를 이용해 일의 자리부터 시작해서 각 자릿수를 추출한다.

- 추출한 자릿수를 배열 번호로 하는 배열값에 1을 더한다.

- 위 2개의 과정이 한 번씩 끝날 때마다 cnt에 10을 곱해 r의 끝 자릿수까지 연산한다.

 

4) 배열값 연산이 모두 끝나면, 각 배열값을 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>

//백준 2577번 코드
int arr[10];
int main() {
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);

	int r = a * b * c;
	int cnt = 1;
	while (cnt < r) {
		arr[r % (cnt * 10) / cnt]++;
		cnt *= 10;
	}
	for (int i = 0; i < 10; i++) {
		printf("%d\n", arr[i]);
	}
}

 

제출 결과

백준 BOJ 2577번 숫자의 개수 문제 C 제출 결과

(2021.12.19 백준 2577번 문제 제출 결과)

반응형