Algorithm/BOJ

[백준 - 11047] 동전 0 - Java

ikjo 2022. 4. 18. 23:31

문제 설명

 

 

11047번: 동전 0

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

www.acmicpc.net

 

풀이 회고

해당 문제에서 요구하는 것은 오름차순으로 동전의 가치가 주어졌을 때 해당 동전들로 k원을 만드는데 필요한 동전 개수의 최솟값입니다. 이 문제는 그리디 알고리즘의 유형으로 정답을 구하기 위해서는 가장 가치가 큰 동전들을 토대로 k원을 구성해야합니다.

 

이때 입력 받은 동전의 가치들을 저장한 배열은 오름차순으로 정렬되어있으므로 배열의 끝 부분부터 k원을 나누면서 몫이 존재할 때(1 이상일 때) 결과값(result)에 더해주도록 합니다. k를 나누는 과정에서 k가 0이 될 수도 있는데, 이 경우에는 더 이상 나누는 것이 무의미하므로 for문을 종료시킵니다.

 

 

전체 소스 코드

import java.util.Scanner;

class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), k = sc.nextInt();

        Integer[] prices = new Integer[n];

        for (int i = 0; i < n; i++) {
            prices[i] = sc.nextInt();
        }

        int result = 0;

        for (int i = n-1; i > -1; i--) {
            if (k / prices[i] > 0) {
                result += (k / prices[i]);
                k %= prices[i];
            }
            if (k == 0) {
                break;
            }
        }

        System.out.println(result);
    }
}

 

 

참고자료

 

 

'Algorithm > BOJ' 카테고리의 다른 글

[백준 - 1931] 회의실 배정 - Java  (0) 2022.05.10
[백준 - 7569] 토마토 - Java  (0) 2022.05.04
[백준 - 2805] 나무 자르기 - Java  (0) 2022.04.15
[백준 - 6603] 로또 - Java  (0) 2022.04.02
[백준 - 1043] 거짓말 - Java  (0) 2022.03.30