Baekjoon/단계별로 풀어보기

[BOJ/백준] 2577번 숫자의 개수 C++ 문제 풀이

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