백준/C++

[백준] 2577번: 숫자의 개수 | C++ 풀이

성실한 당근농부 2023. 6. 22. 21:45

# 문제

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

 


 

# 풀이

목표로 했던 11단계까지 풀이는 마쳤고, solved.ac 기준 Class 1을 달성하기 위해 남은 문제들을 풀고 있다.

그래서 다시 간단한 문제들로 복귀! 정답 소스코드를 바로 확인해보자.

 

#include <iostream>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);	// 두 표준 입출력 동기화 해제
    
    int a, b, c;
    cin >> a >> b >> c;
    int product = a*b*c;
    int num[10] = {0};

    while(product>0){
        num[product%10]++;
        product /= 10;
    }

    for(int i=0; i<10; i++){
        cout << num[i] << '\n';
    }
    
    return 0;
}

우선 입력된 a, b, c 의 곱을 구해 product에 저장해준다.

그리고 그 결과에 0-9까지의 숫자가 각각 몇 번씩 쓰였는지 알아봐야 하므로 크기 10의 정수 배열을 만들어주었다. 그 후에는 아주 간단하다! product 값을 10으로 나머지 연산해주며, 그 값을 인덱스로 주고 배열의 값을 증가시키면 된다.

 

문제에 제시된 예시로 확인해보면 17037300%10 = 0이므로 num[0]의 값을 1 증가 시켜준다.

그리고 나누기 연산을 통해 해당 자리수를 지워준다. 17037300/10 = 1703730

이 과정을 반복하면 아래의 표와 같다.

 

반복 횟수 % /
1 0 1703730
2 0 170373
3 3 17037
4 7 1703
5 3 170
6 0 17
7 7 1
8 1 0

 

따라서 배열에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 카운팅되었을 것이다.

for문을 돌며 0-9까지 해당 인덱스의 값을 출력해주면 해결 완료!

 

 

 

 


 

 

 

2577번: 숫자의 개수

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

www.acmicpc.net

 

728x90