본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 2577번: 숫자의 개수 [C++]

문제 출처: www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

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

www.acmicpc.net

1. 코드

#include <iostream>

using namespace std;

int main(void)
{
    int a, b, c, mul;
    int arr[10] = {0, };

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

    while (mul != 0)   
    {
        int remain = mul % 10;
        for (int i = 0; i < 10; i++)
        {
            if (i == remain)
                arr[i]++;
        }
        mul /= 10;
    }

    for (int i = 0; i < 10; i++)
        cout << arr[i] << endl;

    return 0;
}

(실행)

2. 풀이

int a, b, c, mul;
int arr[10] = {0, };

문제는 a, b, c를 곱한 값의 수가 각각 몇개가 있는지 알아내는 것이다. 그래서 그것들을 배열을 이용하여 풀어볼 것이다. 먼저 배열의 크기가 10으로 설정하고 배열의 값에 전체 0으로 초기화시킨다.

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

그리고 a, b, c를 입력받고 곱해준다.

while (mul != 0)

곱한 값이 0이 아니라면 실행을 시켜주는데

int remain = mul % 10;

곱한 값에 10을 나누었을 때 나머지 값을 전달받는다.

for (int i = 0; i < 10; i++)
{
    if (i == remain)
        arr[i]++;
}

그리고 나머지 값이 0~9 중 무엇인지 확인하고 해당하는 인덱스값을 찾으면 해당 인덱스의 배열의 값을 증가시킨다.

mul /= 10;

그리고 10을 나누어준다.

for (int i = 0; i < 10; i++)
    cout << arr[i] << endl;

위에서 반복문이 종료가 되었다면 배열에 저장된 값을 출력예제에 맞게 출력해준다.