[210212][백준/BOJ] 2577번 숫자의 개수

KeonWoo Kim·2021년 2월 12일
0

알고리즘

목록 보기
8/84

문제

입출력


풀이

3개의 정수를 입력받고 그 곱의 값에 숫자가 각각 몇번 사용됐는지 알아보는 문제이다.
일단 3개의 정수가 100보다 크고 1000보다 작으므로 그 곱은 7~10자리 범위의 숫자이다.

각 자리수를 구하는 방법은 다음과 같다.
처음 값에서 10을 나눈 나머지가 가장 마지막 자리수가 된다.
그 다음 처음 값을 10으로 나누고 다시 이 값을 10으로 나눈 나머지가 마지막 자리의 앞에 있는 수가 된다.
이 과정을 반복하면 모든 자리의 수를 구할 수 있다.

코드

#include <bits/stdc++.h>
using namespace std;

int arr[11];

int main()
{
	char mul[11];
	int a, b, c, d, tmp, cnt=0;

	cin >> a >> b >> c;
	
	d = a * b * c;

	while (d != 0)
	{
		mul[cnt] = d % 10;
		d /= 10;
		cnt++;
	}

	for (int i = 0; i < cnt ; i++)
	{
		tmp = mul[i]-'\0';
		arr[tmp]++;
	}
	
	for (int i = 0; i < 10; i++)
		printf("%d\n", arr[i]);
}

피드백

내가 작성한 방식은 입력받은 3개의 정수의 곱을 d에 삽입하고 이를 분해하면서 char형 배열 mul에 삽입한다. 그 다음 이를 다시 반복문을 돌면서 arr배열에 삽입한다.

이는 매우 비효율적이다.
굳이 mul배열을 만들 필요가 없이 문제를 해결할 수 있다.

while문과 첫번째 for문으로 나누었던 각 자리수를 구하는것과 구한 각각의 자리수를 arr배열에 삽입하는것을 합하였다.

코드

#include <bits/stdc++.h>
using namespace std;

int arr[11];

int main()
{
	int a, b, c, d;

	cin >> a >> b >> c;
	
	d = a * b * c;

	while (d != 0)
	{
		arr[d % 10]++;
		d /= 10;
	}

	for (int i = 0; i < 10; i++)
		printf("%d\n", arr[i]);
}
profile
안녕하세요

0개의 댓글

관련 채용 정보