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
'백준 알고리즘 단계별 풀이 (문제 수) > 1차원 배열 (7)' 카테고리의 다른 글
[C++] OX퀴즈 : 8958번 (0) | 2022.06.20 |
---|---|
[C++] 특정 공식으로 새로운 평균 구하기 : 1546번 (0) | 2022.06.18 |
[C++] 나머지 배열에서 서로 다른 값 찾기 : 3052번 (0) | 2022.06.18 |
[C++] 배열에서 최댓값 찾고 인덱스 구하기 : 2562번 (0) | 2022.06.18 |
[C++] 배열에서 최솟값, 최댓값 구하기 : 10818번 (0) | 2022.06.18 |