728x90
단계별로 풀어보기 - 1차원 배열 - [3단계] 2577번
문제
문제 링크 : www.acmicpc.net/problem/2577
2577번: 숫자의 개수
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.
www.acmicpc.net
입력 복사 :
150 266 427
풀이
입력 받은 숫자의 곱을 처리할 때, string으로 변환하여 처리하였다.
숫자로 처리하면 그 길이를 알기 어렵기 때문에 string으로 변환하여 각 문자의 숫자를 세었다.
숫자를 string으로 변환하는 데에는 to_string()함수를 사용하였다.
num_result 배열에 값을 저장할 때 사용한 인덱스에서는 문자 0을 빼고 사용하였다.
그 이유는 다음 아스키코드표를 참고하면서 설명하도록 하겠다.
문자를 정수가 들어가야 할 부분에 넣게 되면 아스키코드 상의 10진수에 해당하는 숫자로 표기되게 된다.
result[i]를 배열 인덱스 부분에 넣게 되면 문자 '0'이 48번 인덱스를 나타내게 된다.
48번 인덱스를 사용하는 것보다는 0번 인덱스를 사용하는 것이 메모리나 인식적인 측면에서 효율적이기 때문에
'0'(48)을 빼어 해당 문자에 해당하는 숫자로 사용하였다.
CODE
#include <iostream>
#include <string>
using namespace std;
int main() {
int num[3];
int num_result[10] = { 0 };
for (int i = 0; i < 3; i++) {
cin >> num[i];
}
int i_result;
i_result = num[0] * num[1] * num[2];
string result = to_string(i_result);
for (int i = 0; i < size(result); i++) {
num_result[result[i] - '0']++;
}
for (int i = 0; i < 10; i++) {
cout << num_result[i] << endl;
}
}
결과
728x90
'Baekjoon > 단계별로 풀어보기' 카테고리의 다른 글
[BOJ/백준] 1546번 평균 C++ 문제 풀이 (1) | 2020.09.21 |
---|---|
[BOJ/백준] 3052번 나머지 C++ 문제 풀이 (0) | 2020.09.21 |
[BOJ/백준] 2562번 최댓값 C++ 문제 풀이 (0) | 2020.09.21 |
[BOJ/백준] 10818번 최소, 최대 C++ 문제 풀이 (0) | 2020.09.21 |
[BOJ/백준] 1110번 더하기 사이클 C++ 문제 풀이 (0) | 2020.09.21 |