https://www.acmicpc.net/problem/2577
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#include <iostream>
#include <stdio.h> // for sprintf
#include <string.h> // for strlen
using namespace std;
/*
100 <= input < 1000 인 3개 값을 입력받아서 각각의 값을 곱한 수를 구한다.
그리고 그 수에서 0 - 9까지의 숫자가 각각 몇 번 나왔는지를 확인하면 된다.
최대값인 999 가 세 번 나와서 곱하는 경우에도 값은 997,002,999 이므로
4 byte int의 값의 범위인 -2,147,483,648 ~ 2,147,483,647 (21억) 범위를 넘어서지 않는다.
그러니까 그냥 int 사용.
각 자리수가 0 - 9 중 어느 숫자인지를 확인해야되는데,
생각한 방법은 곱한수를 문자열로 바꿔서 확인하거나
아니면 나머지 연산 방식으로 각각의 자리수를 구하는 방식이었다.
*/
int main()
{
// 입력 받을 변수
int input[3] = {0, };
cin >> input[0];
cin >> input[1];
cin >> input[2];
int multi = 1;
for(size_t loopCount = 0; loopCount < sizeof(input)/sizeof(int); loopCount++)
{
multi *= input[loopCount];
}
// 곱한 값을 문자열로 저장한다. 문자열로 변환하는 것은 곱한 결과값이 몇 자리수인지를 확인하기 위함.
char buffer[10] = {0, };
sprintf(buffer, "%d", multi);
// 각 숫자가 몇 번 나왔는지 저장할 변수. 최대 자리수는 9자리이므로 하나의 숫자가 많이 나와도 최대 9다.
// 그러니까 char로 메모리 사용량을 줄여본다.
// ex) [0] = 0이 몇 번 나왔는지를 기록한다.
int output[10] = {0, };
for(size_t loopCount = 0; loopCount < strlen(buffer); loopCount++)
{
output[multi%10] += 1;
multi /= 10;
}
// print
for(size_t loopCount = 0; loopCount < sizeof(output)/sizeof(int); loopCount++)
{
cout << output[loopCount] << endl;
}
return 0;
}
| cs |
댓글 없음:
댓글 쓰기