[java]동전 0 - 백준11047

문제



풀이

문제 해석을 하자면,

  • 준규가 가지고 있는 동전은 총 N종류
  • 동전을 적절히 사용해서 그 가치의 합을 K로 만들때 필요한 동전 개수의 최솟값을 구하라


풀이

  • 돈전 거스름돈 문제이다 -> DP 유형으로 유명
  • 그러나 이 문제는 Ai 가 Ai-1 의 배수이므로 “그리디” 로 풀 수 있는 문제이다.
    • 풀이 : 입력이 오름차순으로 주어지므로 반대로 for 문 조회하면서 “큰 값 부터 가능한 만큼 동전 사용”



코드

public static void main(String[] args) throws IOException {
    StringBuilder sb = new StringBuilder();
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer stk = new StringTokenizer(br.readLine(), " ");
    int N = Integer.parseInt(stk.nextToken());
    int K = Integer.parseInt(stk.nextToken());
    int[] inArr = new int[N + 1];
    for (int i = 0; i < N; i++) {
        inArr[i] = Integer.parseInt(br.readLine());
    }
    //run
    int sum = 0;
    int result = 0; // count
    for (int i = N - 1; i >= 0; i--) {
        int diff = K-sum;
        if (inArr[i] <= diff) {
            while (inArr[i] <= diff) { // inArr[i] 값을 더할 수 있는 최대만큼 반복해서 더한다.
                sum+=inArr[i];
                diff = K-sum; //update
                result++; //update
            }
        }
    }
    //output
    System.out.println(result);
}



느낀점

생략

댓글남기기