백준공부/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();
	}			
}