백준공부/java
[백준] 14916번 거스름돈 문제! (silver 5
gomduri43
2022. 8. 25. 22:25
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
int n=Integer.parseInt(br.readLine());
int min=0;
if(n%5==0) {
min+=n/5;
bw.write(min+"");
}
else {
min=50000; //min 일어날 수 있는 수 중 가장 큰수, 물론 n이 100000일 경우
//5원짜리 2만개로 해결하겠지만, 밑에서 최소 개수가 얼마나올지 모르는 상황이므로,
//초기는 일어날 수 있는 가장 큰수 10만/2의 값을 대입한다.
int count;
for(int i=n/5; i>=0; i--) {
if((n-i*5)%2==0) {
count=i+(n-i*5)/2;
min= min>count ? count: min;
}
}
//min이 바뀌지 않은 경우는 말 그대로, 5원과 2원을 이용해서 최소 동전의 개수를 구하지 못함
//즉 아예 불가능한 경우거나 2원으로만 교체를 해야한다.
//밑에서 n을 2로 나누어 나누어 떨어지면, 나누기 2의 몫, 아니면 불가능 표시 -1을 출력
if(min==50000) {
min= n%2==0 ? n/2:-1;
}
bw.write(min+"");
}
bw.flush();
}
}