BaekJoon : 11047번(동전 0)

Java : BaekJoon Greedy

BaekJoon Greedy 저의 문제풀이 입니다.

혹시 더 좋은 방법 알려주신다면 정말 감사하겠습니다!

11047

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.

동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)

둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

10 4200	// 동전의 종류 수와 금액을 입력합니다.
1
5
10
50
100
500
1000
5000
10000
50000	// 동전의 종류 수만큼 동전을 입력합니다.

내코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader br = new BufferedReader(isr);
		
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		BufferedWriter bw = new BufferedWriter(osw);
		
		try {
			// 코인 종류 개수와 가격을 입력받습니다.
			String coinTypeCountAndPrice = br.readLine().trim();
			
			// 공백을 기준으로 토큰으로 나눕니다.
			StringTokenizer stk = new StringTokenizer(coinTypeCountAndPrice);
			
			// 나눈 토큰 개수가 2개가 아니면 프로그램 종료(2개를 입력하지 않으면 종료)
			if(stk.countTokens() != 2)
				return;
			
			// 토큰을 가져와 변수에 담습니다.
			int coinTypeCount = Integer.parseInt(stk.nextToken());
			int price = Integer.parseInt(stk.nextToken());
			
			// 코인 종류 개수만큼 배열을 만들어 줍니다.
			int coin[] = new int[coinTypeCount];
			
			// 배열방에 값 입력
			for (int i = 0; i < coin.length; i++)
				coin[i] = Integer.parseInt(br.readLine().trim());
			
			// 배열방을 순회하기 위한 변수
			int i = coin.length - 1;
			// 가격을 형성하는데 필요한 총 코인 개수
			int totalCoinCount = 0;
			
			// 가격이 0이하가 될 때 까지 루프를 돕니다.
			// "가격/코인종류" 로 나온 몫으로 코인 개수를 판단하고 가격에 코인개수*코인종류를 빼줍니다.
			while(price > 0) {
				int quotient = price / coin[i];
				if(quotient != 0) {
					price -= (coin[i] * quotient);
					totalCoinCount += quotient;
				}
				--i;
			}
			
			bw.write(Integer.toString(totalCoinCount));
			bw.flush();
			bw.close();			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

해당 코드들은 저의 GitHub에서 확인할 수 있습니다.

댓글남기기