본문 바로가기
백준 알고리즘 단계별 풀이 (문제 수)/1차원 배열 (7)

[C++] 각 자릿수의 숫자 갯수 세기 : 2577번

by 17번 일개미 2022. 6. 18.
728x90

문제

 

 

세 개의 자연수 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번 쓰였다.

 


풀이

 

#include <iostream>
using namespace std;

int main()
{
	int a; int b; int c;
	cin >> a; cin.ignore();
	cin >> b; cin.ignore();
	cin >> c;

	int result = a * b * c;
	// 각 0~9 까지의 갯수를 저장하는 배열 arr[3] -> 3이 몇개인지 저장
	int arr[10] = { 0, }; // 쓰레기 값을 갖지않게 초기화

	while (result > 0)
	{
		// index 는 0~9 중 어떤 숫자인지?
		int index = result % 10; // result를 10으로 나눈 나머지는 항상 일의 자리
		arr[index]++; // 나온 index의 갯수를 하나 늘려줌
		result /= 10; // result 를 10으로 나눈 몫은 항상 오른쪽으로 한칸씩 땡겨짐
					// ex) 267 >> 26 >> 2
	}
	for (int i = 0; i < 10; i++)
	{
		cout << arr[i] << "\n";
	}
}

1. 세 수를 입력받고 result에 곱한 값을 저장

2. 0~9 까지 각 자릿수별로 갯수를 저장할 배열 할당 >> index는 해당 숫자를 의미 >> arr[3] 은 3이 몇개인지 저장함

3. 어떤 수를 10으로 나눈 나머지는 항상 일의 자리를 추출해내고,

   어떤 수를 10으로 나눈 몫은 그 숫자를 오른쪽으로 한칸씩 당긴다.

4. 해당 원리를 사용하여 숫자를 한칸 씩 뒤로 밀면서 일의 자리를 추출해서 arr[해당 숫자] 를 1씩 증가 시켜준다.

5. 결과 출력

 

728x90