백준 11047 동전 0

자이로 체펠리·2021년 6월 13일
0

그리디 감을 잡기 위해 한 블로그의 추천 리스트에 있는 문제를 풀어보았다. 링크를 첨부한다.
-욕심쟁이-알고리즘-개념

프로그래머스 문제만 풀다가 오랜만에 백준을 접하고 Scanner, 클래스를 작성하는 곳에서 오류가 더 많이 났다.

문제

준규가 가지고 있는 동전은 총 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의 배수)

출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.

예제

10 4200
1
5
10
50
100
500
1000
5000
10000
50000

예제 출력 1

6

이런 식으로 대게 잔돈을 얼마나 반환하는가의 로직과 비슷한 로직이 필요해 보였다.

로직을 구성하는 것보다. 아까 말한 외부적 문제에서 더 애를 먹었다.
코드의 구성은 크게
1. 변수설정
2. 반복문 연산
3. 출력
으로 나누어져있다.

import java.util.Scanner;

public class Main{
   public static void main(String[] args){
       Scanner in = new Scanner(System.in);
       
       int N = in.nextInt();
       int K = in.nextInt();
       
       int[] coins = new int[N];
       for(int i=0; i<N;i++){
           coins[i]= in.nextInt();
       }
       int min =0;
       for(int i = N-1;i>=0;i--){
           if(K-coins[i]>=0){
               int coin = K/coins[i];
               K-=coin*coins[i];
               min+=coin;
           }
       }
       System.out.println(min);
   }
}
profile
"경의를 표해라. 경의를 갖고 회전의 다음 단계로 나아가는 거다…… [LESSON 4] 다."

0개의 댓글