코딩 테스트/알고리즘
[백준] 11047 동전 0 - 그리디(Greedy)
토자맨
2024. 8. 1. 18:56
문제
코드
쉽게 풀 수 있는 대표적인 그리디 문제이다.
풀이 방법은 아래와 같다.
- 풀이 방법
- 동전 종류를 배열에 저장한다.
- 배열을 큰 값부터 순회하며 K값보다 작거나 같은 경우 동전을 사용하고 사용한 동전의 개수를 센다.
- 사용한 동전의 개수를 출력한다.
- 걸린 시간: 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);
}
}