Algorithm/Algorithm 풀이

[JAVA] 백준 11047 - 그리디 알고리즘

ellapk 2021. 8. 22. 16:45

 

오늘 문제는 그리디 알고리즘이다.

문제를 풀기 전에 그리디 알고리즘(Greedy Algorithm)이 뭘까를 쉽게 알아보고 가자.

 

그리디 알고리즘은 말그대로 탐욕 알고리즘!

최적의 답을 선택하는 과정을 반복하여 적합한 결과를 도출한다는 것이 그리디 알고리즘이다.

즉 큰 틀, 미래를 생각하지 않고 각 단계를 보아 무엇이 최선의 선택일지 판단하고 도출하면 되는 것이다.

 

 

이 문제는 동전 개수의 최솟값을 구하는 프로그램을 작성하고 있다.

여기서 그리디 알고리즘을 적용하면, '최솟값'을 위해서

액수가 큰 가치를 먼저 탐색하면 되는 것이다.

 

익히 본 문제들을 푸는 과정과 비슷해보이지만,

액수가 큰 가치를 먼저 활용하기 위해서 for문을 역순으로 활용하는 정도라고 생각하면 된다.

 

 

 

import java.util.Scanner;

public class Main{
    
    public static void main(String[] args){
        
        Scanner in = new Scanner(System.in);
        
        int N=in.nextInt();
        int K=in.nextInt();
       
        int[] arr=new int[N];
        
        for(int i=0;i<N;i++){
            arr[i]=in.nextInt();
        }
        
        int count=0;
        
        for(int i=N-1;i>=0;i--){
            if(arr[i]<=K){
                count += (K/arr[i]);
                K=K%arr[i];
            }
        }
        
        System.out.println(count);
        
       
    }
}