https://www.codetree.ai/missions/8/problems/add-coins?&utm_source=clipboard&utm_medium=text
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
이 문제는 그리디 알고리즘의 기초문제이다.
n종류의 동전으로 주어진 금액을 완성시키기 위해 필요한 동전의 개수의 최솟값을 구해야 한다.
이 때 동전은 오름차순으로 정렬된 상태로 주어진다.
만들어야 하는 금액을 m이라고 하자.
가능한 빨리 효율적으로 문제를 풀기 위해, 배열의 가장 끝에서부터 차례로 앞으로 탐색하며 탐색중인 동전으로 m에서 해당 값을 최대한 뺀다. 뺄 때 마다 답에 1을 더한다. 이를 m이 0이 될 때까지 반복하면 답을 구할 수 있게 된다.
import java.util.*;
import java.io.*;
import java.math.*;
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 m = Integer.parseInt(st.nextToken());
int[] arr= new int[n];
for(int i = 0;i<n;i++){
arr[i] = Integer.parseInt(br.readLine());
}
int ans = 0;
for(int i = n-1;i>=0;i--){
if(m - arr[i] < 0) continue;
while(m > 0){
ans++;
m -= arr[i];
if(m - arr[i] < 0) break;
}
}
System.out.println(ans);
}
}
m이 500원이고, 이제 탐색할 동전이 600인 경우처럼 탐색중인 동전으로 m을 한번도 뺄 수 없을 떄의 경우를 고려하지 않아 틀렸었다.
'알고리즘 > 코드트리 문제풀이' 카테고리의 다른 글
코드트리 [자바 java] 쪼개어 배낭 채우기 구현 (0) | 2023.09.12 |
---|---|
코드트리 [자바 java] G & H 반전시키기 (0) | 2023.09.10 |
코드트리 [자바 java] 자연수 n개의 합 (0) | 2023.09.10 |
코드트리 [자바 java] 숫자 빠르게 찾기 (0) | 2023.09.08 |
코드트리 [자바 java] 정수 명령 처리 6 (2) | 2023.09.08 |