동전 0

김나영·2023년 5월 29일
0

알고리즘

목록 보기
2/16

문제

준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.
동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.


입력

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)
둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)


출력

첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.


풀이

Scanner로 값을 받아옴

Scanner sc = new Scanner(System.in);

변수 설정

int n = sc.nextInt(); // 동전 종류
int total = sc.nextInt(); // 가치의 합
int[] coin = new int[n]; // 동전 값
for (int i = 0; i < n; i++) {
     coin[i] = sc.nextInt();
 }

최소 동전 개수 지정

int count = 0; // 최소 동전 개수

coin[]에 동전의 값을 넣어줌

for (int i = 0; i < n; i++) {
    coin[i] = sc.nextInt();
}

coin 배열은 오름차순으로 정렬되어있으므로 마지막 인덱스부터 반복문 시작

for (int i = n-1; i >= 0; i--)

total보다 작거나 같으면서 가장 가치가 큰 coin[i]를 찾기

if( coin[i] <= total)

total / coin[i]를 통해 coin[i]가 몇번 쓰였는지 개수를 센 후 그 몫을 count에 누적시킴

count += total/coin[i];

나머지 값 total % coin[i]한 값을 변수 total에 다시 넣어줌

total = total % coin[i];

최소한의 동전 개수 출력

System.out.println(count);

전체코드

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(); // 동전 종류
        int total = sc.nextInt(); // 가치의 합
        int[] coin = new int[n]; // 동전 값
        for (int i = 0; i < n; i++) {
            coin[i] = sc.nextInt();
        }
        int count = 0; // 최소 동전 개수
        for (int i = n-1; i >= 0; i--) {
            if( coin[i] <= total) {
                count += total/coin[i];
                total = total % coin[i];
            }
        }
        System.out.println(count);
    }
}

처음 오류 났던 부분

for (int i >= 0; i = n-1; i--)

순서를 바꾸니 오류가 제거됨

0개의 댓글