문제 정보
- 백준 실버 4
- 그리디
- 문제 링크
풀이
전형적인 그리디 알고리즘 문제다.
동전의 단위가 배수 관계이기 때문에 항상 값이 큰 동전을 가능한 많이 쓰는 게 최적이다.1 예를 들어 10원 동전을 5원 동전으로 대체해봤자 개수만 늘어날 뿐이기 때문이다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
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 answer = 0;
int[] tokens = new int[n];
for (int i = 0; i < n; i++)
tokens[i] = Integer.parseInt(br.readLine());
for (int i = n - 1; i >= 0; i--) {
int token = tokens[i];
answer += k / token;
k %= token;
if (k == 0)
break;
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(answer+"\n");
bw.flush();
bw.close();
}
}Footnotes
-
만약 배수 관계가 아니라면 그리디로는 최적해를 보장할 수 없음. 이 경우 DP 사용. ↩