# 문제
세 개의 자연수 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
'백준 > C++' 카테고리의 다른 글
[백준] 8958번: OX퀴즈 | C++ 풀이 (0) | 2023.06.24 |
---|---|
[백준] 2920번: 음계 | C++ 풀이 (0) | 2023.06.23 |
[백준] 24267번: 알고리즘 수업 - 알고리즘의 수행 시간 6 | C++ 풀이 (0) | 2023.06.21 |
[백준] 24266번: 알고리즘 수업 - 알고리즘의 수행 시간 5 | C++ 풀이 (0) | 2023.06.20 |
[백준] 24265번: 알고리즘 수업 - 알고리즘의 수행 시간 4 | C++ 풀이 (0) | 2023.06.19 |