본문 바로가기

문제풀기/백준 문제풀이

[백준 문제 2577번] 숫자의 개수 문제

728x90
반응형

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

 

2577번: 숫자의 개수

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

www.acmicpc.net

 

문제 2577) 숫자의 개수

 

문제)
세 개의 자연수 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보다 작은 자연수이다.

출력)
첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

 

NO 예제 입력 예제 출력
1 150 266 427 3 1 0 2 0 0 0 2 0 0

 

import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int a;
		int mul = 1;
		int arr[] = new int[10];
		
		for(int i=0; i < 3; i++) {
			a = sc.nextInt();
			mul *= a;
		}
				
		int len = (mul + "").length();
		
		for(int i=0; i<len; i++) {
			arr[mul % 10]++;
			mul /= 10;
		}
		
		for(int i=0; i<10; i++) {
			System.out.println(arr[i]);
		}
    }
}
3개의 변수를 입력 받고 mul이라는 변수에 곱을 출력할 수 있게 만듭니다.

len이라는 변수에는 mul의 길이를 저장하고 해당 길이만큼 for문을 반복해 arr[나머지]에 1을 더하고 mul은 10을 나눠주면서 계속해서 arr에 값을 증가시킵니다.

예제의 곱은 17037300이고 이를 분해해 보겠습니다.

1. 나머지 : 0, mul : 1703730, arr[0]에 1이 증가됩니다.
2. 나머지 : 0, mul : 170373, arr[0]에 1이 증가됩니다.
3. 나머지 : 0, mul : 17037, arr[3]에 1이 증가됩니다.
4. 계속해서 반복하면서 해당 배열에 값이 증가하면서 원하는 값을 출력할 수 있습니다.

 

 

다른 코드의 예시를 보면 곱을 문자열로 바꾸어 substring을 이용하는 것입니다.

위의 mul 구하는 for문 뒤 아래의 코드를 사용하면 문자열로 변경해 값을 구할 수 있습니다!

 

	String temp = String.valueOf(mul);
		
	for(int i=0; i<temp.length(); i++) {
		arr[Integer.parseInt(temp.substring(i,i+1))]++;
	}
		
	for(int i=0; i<10; i++) {
		System.out.println(arr[i]);
	}

 

이번에는 수학적으로 푼 것 같아서 마음에 드네요!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

728x90
반응형