코딩 테스트/알고리즘

[백준] 11047 동전 0 - 그리디(Greedy)

토자맨 2024. 8. 1. 18:56

문제

코드

쉽게 풀 수 있는 대표적인 그리디 문제이다.
풀이 방법은 아래와 같다.

  • 풀이 방법
    1. 동전 종류를 배열에 저장한다.
    2. 배열을 큰 값부터 순회하며 K값보다 작거나 같은 경우 동전을 사용하고 사용한 동전의 개수를 센다.
    3. 사용한 동전의 개수를 출력한다.
  • 걸린 시간: 11분
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class _11047 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        int[] coin = new int[N];
        for (int i = 0; i < N; i++) {
            coin[i] = Integer.parseInt(br.readLine());
        }
        int i = N-1;
        int cnt = 0;
        while (K != 0) {
            if (K >= coin[i]) {
                K -= coin[i];
                cnt++;
                continue;
            }
            i--;
        }

        System.out.println(cnt);
    }
}

 

나누기 연산을 사용하여 더 효율적으로 작성한 코드가 있어서 가져왔다. 알고리즘 문제를 풀다 보면 나누기를 이용하여 효율적으로 풀 수 있는 문제가 많다. 앞으로는 더 효율적으로 풀 수 있는 방법이 있는지 한번 더 고민해봐야겠다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        int[] coins = new int[N];
        for (int i = 0; i < N; i++) {
            coins[i] = Integer.parseInt(br.readLine());
        }

        int ans = 0;

        int j = N - 1;
        for (int i = N - 1; i >= 0; i--) {
            if (K >= coins[i]) {
                ans += K / coins[i];
                K = K % coins[i];
            }
        }

        System.out.println(ans);
    }
}