Coding Test/BaekJoon

[BaekJoon Java] 숫자의 개수(2577)

momong'-' 2020. 12. 26. 17:48

www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

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

www.acmicpc.net


  • 문제

세 개의 자연수 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번 쓰였다.

  • 예제 입출력

  • 풀이
package step.array.one_dimensional;

import java.util.Scanner;

/**
 * 세 개의 자연수 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번 쓰였다.
 * 
 * @author imj10
 *
 */
public class NumberOfNumbers {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c = sc.nextInt();
		
		int sum = a * b * c;
        
        	// 결과를 담을 list
		int[] list = new int[10];
		
		while ( sum > 0 ) {
			list[sum % 10]++;
			sum /= 10;
		}
		
		for (int i=0; i <list.length; i++ ) {
			System.out.println(list[i]);
		}
	}
}

 

  • 결과


  • 추가설명

처음에는 나온 값을 배열에 넣어 자릿수 하나하나 찾으려고 했다... 문자처럼

근데 생각해보니 숫자는 나눠서 하면 되네...ㅎ

괜히 엄청 복잡하게 풀 뻔...

 

값을 구해 sum에 넣고 sum%10을 구해 1의자리 부터 하나씩 구해 배열에 넣었다.

값은 0-9까지 10개로 한정된 값만 나오므로  Array를 사용한다.

배열

list[0]: 0 개수

list[1]: 1 개수

list[2]: 2 개수

...

list[9]: 9 개수

 

 

예를 들어 A × B × C = 150 × 266 × 427 = 17037300이다.

디버깅

  sum sum%10 list[sum%10] list
0 17037300     0,0,0,0,0,0,0,0,0,0
1 1703730 0 1 1,0,0,0,0,0,0,0,0,0
2 170373 0 2 2,0,0,0,0,0,0,0,0,0
3 17037 3 1 2,0,0,1,0,0,0,0,0,0
4 1703 7 1 2,0,0,1,0,0,0,1,0,0
5 170 3 2 2,0,0,2,0,0,0,1,0,0
6 17 0 3 3,0,0,2,0,0,0,1,0,0
7 1 7 2 3,0,0,2,0,0,0,2,0,0
8 0 1 1 3,1,0,2,0,0,0,2,0,0

결과 3 1 0 2 0 0 0 2 0 0