Computer Science/자료구조와 알고리즘

[JAVA] 백준 2577번 : 숫자의 개수

BS Kwak 2020. 8. 10. 19:42

1. 문제

세 개의 자연수 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의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A×B×C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

 

2. 코드

import java.util.Scanner;
import java.util.stream.*;
import java.util.Arrays;
import java.lang.Math;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int a,b,c;
        int[] cnt = new int[10];
        a=sc.nextInt(); b=sc.nextInt(); c=sc.nextInt();
        int number = a*b*c;
        int length = (int)(Math.log10(a*b*c)+1);
        int[] digits = Stream.of(String.valueOf(number).split("")).mapToInt(Integer::parseInt).toArray();
        for(int i=0;i<length;i++){
            for(int j=0;j<10;j++){
                if(digits[i]==j)    cnt[j]++;
            }
        }
        for(int i=0;i<10;i++){
          System.out.println(cnt[i]);
        }
        sc.close();
    }
}

 

3. 풀이

 

숫자의 길이를 구하는 방법

int number = 12345;
int length = (int)(Math.log10(number)+1);
//double 형이 되므로 int형으로 형변환 시켜줘야 함

 

각 자리수를 배열에 저장하는 방법

// import java.util.Arrays;
// import java.util.stream.*;
int num = 12345;
int[] digits = Stream.of(String.valueOf(number).split("")).mapToInt(Integer::parseInt).toArray();

 

4. 링크

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

 

2577번: 숫자의 개수

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

www.acmicpc.net