알고리즘/백준
[백준 11047]그리드-동전 | JAVA
jiiihye
2022. 2. 6. 22:42
◎ 문제
동전 종류의 개수를 n으로 주고 뒤에 금액 k를 적으면 최소로 동전을 사용한 개수를 구하는 문제이다.
처음에 동전의 개수가 10개일때,
화폐 단위는 1원 5원 10원 50원 100원 500원 1000원 5000원 10000원 50000원으로 예시를 들어서 화폐 단위 규칙이 x5,x2가 반복되는 문제로 풀었는데 아니였다.. 그냥 예시로 둔게 1,5,10...이였고 화폐단위 역시 사용자에게 입력을 받아 언제든 달라질수 있는 값들이였다.
◎ 코드
package greedy;
import java.util.Scanner;
public class num11047 {
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
int n = in.nextInt(); // 동전의 개수
int k = in.nextInt(); // 돈
int count = 0; // 최소 동전 개수
int coin[] = new int[n]; //입력받은 동전의 개수많큼 동전 단위 입력받기
for(int i=0;i<n;i++) {
coin[i] = in.nextInt(); // 화폐 단위 개수 만큼 입력 받기
}
for(int j=n-1;j>=0;j--) { //입력받은 개수 큰것부터 글자 나누기
if(coin[j]<=k) { // 입력받은 돈보다 동전 화폐단위가 작거나 같아야됨
count = count + k/coin[j]; // 큰 화폐단위 동전부터 나눠서 개수 count에 쌓기
k = k%coin[j]; // 나머지 돈으로 다시 세팅
}
}
System.out.println(count);
} catch (Exception e) {
System.out.println(e);
}
}
}
위는 이클립스에 따로 풀어본 것이고 백준에 제출할때는
패키지를 지우고 클래스 이름을 Main으로 해야 정답으로 인정받을 수 있다.
백준 입력시 정답
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
Scanner in = new Scanner(System.in);
int n = in.nextInt(); // 동전의 개수
int k = in.nextInt(); // 돈
int count = 0; // 최소 동전 개수
int coin[] = new int[n]; //입력받은 동전의 개수많큼 동전 단위 입력받기
for(int i=0;i<n;i++) {
coin[i] = in.nextInt(); // 화폐 단위 개수 만큼 입력 받기
}
for(int j=n-1;j>=0;j--) { //입력받은 개수 큰것부터 글자 나누기
if(coin[j]<=k) { // 입력받은 돈보다 동전 화폐단위가 작거나 같아야됨
count = count + k/coin[j]; // 큰 화폐단위 동전부터 나눠서 개수 count에 쌓기
k = k%coin[j]; // 나머지 돈으로 다시 세팅
}
}
System.out.println(count);
} catch (Exception e) {
System.out.println(e);
}
}
}