Java/Baekjoon

[Baekjoon] 11047번 동전 0 (Java)

다콩잉 2022. 10. 3. 14:01

생각보다 정말 쉬운 문제였다. 시간 초과에 자주 걸려서 이번에도 시간이 초과될까봐 걱정했는데 다행히 한 번에 통과했다.

예제 입력1

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

예제 출력1

6

 

 

예제 입력2

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

예제 출력2

12

 

 

import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        String[] num = scan.nextLine().split(" ");
        ArrayList<Integer> arr = new ArrayList<Integer>();
        for(int i = 0; i < Integer.parseInt(num[0]); i++){
            int x = Integer.parseInt(scan.nextLine());
            boolean boo = Integer.parseInt(num[1]) > x;
            // 정해진 금액을 만들어야 되는 문제이기 때문에 해당 금액보다 작거나 같은 수만 저장
            if(Integer.parseInt(num[1]) >= x){  
                arr.add(x);
            }
        }
        int cnt = 0;
        int y = Integer.parseInt(num[1]);   // 원하는 금액
        // 오름차순으로 저장되어 있기 때문에 해당 금액(y)에 가장 가까운 동전으로 먼저 만듦
        for(int i = arr.size()-1; i >= 0; i--){
            // 해당 금액보다 작거나 같은 수로만 만듦
            if(y >= arr.get(i)){
                int n = y / arr.get(i);
                y = y % (arr.get(i)*n);     // 해당 금액에 가장 가깝게 만들고 나머지로 다시 금액을 맞춤
                cnt += n;
                if(y == 0){break;}
            }
        }
        System.out.println(cnt);
    }
}

 

728x90