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번 쓰였다.
  • 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.

풀이 과정

  • 세자리수 자연수 abc를 했을 때 자리 수를 생각 해보자. 999를 1000이라 생각하면 ( 10^3 ) * 3 = 10^9이다. 이는 2^10 == 10^3으로 볼 수도 있다. 따라서 2^30 == 10^9도 가능
  • int의 표현 범위는 -2^31~2^31-1 사이 이므로 위의 값은 int로 처리 가능하다.
  • (1) 10으로 나눈 나머지를 배열의 인덱스로 해서 해당 값 1씩 증가 ex. arr[0] ⇒ 숫자 0의 갯수를 담은 배열값
  • 10으로 나눈 몫으로 (1)을 반복

소스 코드

#include <iostream>

using namespace std;

int main()
{ 
    int a,b,c; 
    int arr[10] ={0}; 
    
    cin >> a >> b >> c;
    
    int num = a*b*c;
    
    while( num != 0 ) 
    { 
    	arr[num % 10] +=1; 
        num /= 10;
    } 
    
    for(int i= 0; i<10; i++)
    { 
    	cout << arr[i] << endl; 
    } 
    
    return 0;
}

링크

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

 

2577번: 숫자의 개수

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.

www.acmicpc.net

 

728x90
반응형

'문제풀이 > BOJ' 카테고리의 다른 글

[C++ 백준] 1546 평균  (0) 2020.03.23
[C++ 백준] 3052 나머지  (0) 2020.03.21
[C++ 백준] 10039 평균 점수  (0) 2020.03.18
[C++ 백준] 2562 최대값  (0) 2020.03.13
[C++ 백준] 10818 최소, 최대  (0) 2020.03.11