개발/Boj
Boj -14196/ java/ greedy
바이솔
2024. 7. 16. 13:21
백준 14196번 greedy 알고리즘의 대표적인 문제다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int money = Integer.parseInt(br.readLine());
int money5 = money/5;
if(((money - money5)%2 != 0)&(money5 !=0) ){ //만일 5가 최대인데 홀수라면
money5--;
}
if((money - money5*5)%2 !=0){
System.out.print(-1);
}
else {
int money2 = (money - money5 * 5) / 2;
System.out.print(money5 + money2);
}
}
}
간단히 설명해서 greedy 알고리즘은 그 순간에 최적의 선택을 하는 것. 여기서는 당장 5원을 최대한 늘리는 것이 최선의 선택.
문제를 너무 복잡하게 풀었다. 아래처럼 반복문을 활용해 풀 수 있었을 것이다.
int answer = -1;
for(int i=money/5;i>=0;i--){
if((money - (5 * money5))%2 == 0){ //5원을 i개 쓰고 2원으로 거스를 수 있을 때
answer = i + (money - (5 * i))/2; //동전의 개수 저장
break; //가장 먼저 거슬러 줄 때가 최소 개수
}
}