반응형
백준 11047번 문제 - 동전 0
11047번: 동전 0
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
www.acmicpc.net
문제 분석

- 가능한 동전 가치 n개를 오름차순으로 입력 받고, 앞서 입력받은 k 값을 만들기 위한 최소한의 동전 수를 구해 출력해라.
해결 키 포인트
- 그리디 알고리즘 이용
- 입력 받고, 동전을 확인할 때는 내림차순으로 확인
그리디 알고리즘 (탐욕 알고리즘)
현재 상태에서 보는 선택지 중 최선의 선택지가 전체 선택지 중 최선의 선택지라고 가정하는 알고리즘이다.
쉽게 말해, 지금의 최선 = 전체의 최선
뒤에 사진에서 서울에서 부산까지의 최소거리를 구하고자할 때,
서울에서 대구의 최솟 값을 선택하고, 대구에서 부산까지의 최솟값을 선택하는 알고리즘

코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// N, K 입력
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 count = 0;
// 가장 큰 수부터 확인하면서 반복
for(int i=N-1;i>=0;i--) {
// 만약 현재 돈이 해당 코인으로 나누어진다면
if(K / coins[i] > 0) {
// count 증가 및 k에서 코인으로 계산한 금액 제외
int newCount = K / coins[i];
K = K - (newCount * coins[i]);
count += newCount;
}
}
System.out.println(count);
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[백준 1744] 수 묶기 (JAVA) (0) | 2023.08.12 |
---|---|
[백준 1715] 카드 정렬하기 (JAVA) (0) | 2023.08.12 |
[백준 1300] K번째 수 (JAVA) (0) | 2023.08.12 |
[백준 2343] 기타 레슨 (JAVA) (0) | 2023.08.12 |
[백준 1920] 수 찾기 (JAVA) (0) | 2023.08.11 |