프로그래밍-학습기록/코딩테스트

백준 온라인 저지 | 2577 | 배열: 숫자의 개수

leesche 2020. 7. 27. 23:20

문제 ( https://www.acmicpc.net/problem/2577 )

나의 풀이

어려워 보였지만, 무난하게 풀었다. 시간이 좀 더 있었으면 더 효율적인 코드를 짰을 것 같다. 다음에 다시 수정해보자!

package baekjunOnlineJudge;

import java.util.Scanner;

public class Bj_2577 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		double multiplicationResult = 1;
		double million = 1000000;
		int[] numberCount = new int[10];
		
		for(int i=0; i<3; i++) {
			multiplicationResult *= sc.nextInt();
		}
		if(multiplicationResult/(100*million) > 1 && multiplicationResult/(100*million) < 10) { // 1억 대 숫자
			// System.out.println("multiplicationResult= "+multiplicationResult);
			for(int i=0, digit=0, remainder = 10, multiplier=1; i<9; i++, multiplier *= 10) {
				digit = (int)(multiplier * multiplicationResult / (100*million)%remainder);
				// System.out.println("digit= " + digit);
				numberCount[digit]++;
			}
		}
		if(multiplicationResult/(10*million) > 1 && multiplicationResult/(10*million) < 10) { // 1000만 대 숫자
			// System.out.println("multiplicationResult= "+multiplicationResult);
			for(int i=0, digit=0, remainder = 10, multiplier=1; i<8; i++, multiplier *= 10) {
				digit = (int)(multiplier * multiplicationResult / (10*million)%remainder);
				// System.out.println("digit= " + digit);
				numberCount[digit]++;
			}
		}
		if(multiplicationResult/million > 1 && multiplicationResult/million < 10) { // 100만 대 숫자
			// System.out.println("multiplicationResult= "+multiplicationResult);
			for(int i=0, digit=0, remainder = 10, multiplier=1; i<7; i++, multiplier *= 10) {
				digit = (int)(multiplier * multiplicationResult / (1*million)%remainder);
				// System.out.println("digit= " + digit);
				numberCount[digit]++;
			}
		}
		
		for(int i=0; i<10; i++) {
			System.out.println(numberCount[i]);
		}
	}

}