<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[백준 2577] 숫자의 개수

BlockDMask 2017. 7. 26. 23:11
반응형

0) 제목


숫자의 개수

BOJ의 2577 번 문제입니다.

C++ 이용해서 풀었습니다.


1) 문제설명


세개의 세자리 자연수 A, B, C
가 주어집니다 


A*B*C 한 결과에서

0~9 까지의 숫자의 갯수가 각각 몇개인지 출력하는 문제입니다.


2) 풀이과정


세자리수 자연수 A*B*C 를 했을때 자릿 수를 생각해보면
999를 1000이라 생각하면 10^3 입니다. 이를 세번 곱하니 10^9 입니다.


int가 4bytes 일때, 2^32 이니까. 2^10 == 10^3 이 세번이므로
2^30 == 10^9 과 비슷하다고 생각할 수 있습니다.

그러므로 int 값 범위 안에서 해결이됩니다.



0~9 까지의 숫자를 카운트할 배열 arr을 만들고 0으로 초기화 합니다.

세개의 자연수를 곱한 값을 10으로 나눈 나머지를 인식해서 해당 배열 인덱스를 1씩 증가 해옵니다.

그 다음 세개의 자연수를 곱한 값을 10으로 나누어서 1의 자리를 없앱니다.

 (1의 자리를 계속 얻어오면서, 10으로 나누어서 자릿수를 없애방식)


3) 함수설명


주석 달아놨습니다.


4) 코드


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
#include<iostream>
using namespace std;
 
int main(void){
    int a, b, c;        //입력받을 3가지 변수 
    int arr[10= {0};    //0으로 초기화 
    
    cin >> a >> b >> c;    // 숫자 3가지를 받습니다. 
    
    int result = a*b*c;
    
    //1의 자리를 얻어 옵니다.
    //resutl 가 0 이 되면 while문을 빠져나갑니다. 
    while(result != 0){
        arr[result % 10+=1;
        result /= 10;
    }
    
    //출력. 
    for(int i=0; i<10; i++){
        cout << arr[i] << endl;
    }
    
    return 0;
}
cs


5) 인증


출처 : https://www.acmicpc.net/problem/2577

쉬운 문제, 어려운 문제 가리지 않고 풀고있습니다.

백준 아이디는 공개하지 않고 캡쳐 했습니다.

반응형