그리디 알고리즘 이란
Greedy Algorithm은 문제를 해결하는 과정에서 그 순간순간마다 최적이라고 생각되는 결정을 하는 방식으로 진행하여 최종 해답에 도달하는 문제 해결 방식이다.
순간 순간마다의 최선의 결정이 전체 문제에서 최선의 해결책이 되지 않을 수 있다.
하지만 이러한 단점들을 극복하는 Greedy의 가장 큰 장점은 계산 속도에 있다. 그래서 Greedy 방법이 통하는 몇몇의 문제에서는 최적해를 빠르게 산출해낼 수 있다.
그리디 알고리즘 예제
모험가 길드 문제
모험가 길드장인 동빈이는 모험가 그룹을 안전하게 구성하고자 공포도가 X인 모험가는 반드시 X명 이상으로
구성한 모험가 그룹에 참여해야 여행을 떠날 수 있도록 규정했다.
N명의 모험가에 대한 정보가 주어졌을때, 여행을 떠날 수 있는 그룹 수의 최댓값을 구하라
- 2 3 1 2 2
import java.util.Arrays;
import java.util.Scanner;
// 모험가 길드 문제
public class GreedyTest4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 길드 인원
int n = sc.nextInt();
// 길드인원 공포도
int[] list = new int[n];
for(int i = 0; i < n; i++){
list[i] = sc.nextInt();
}
//공포도에 따라서 정렬
Arrays.sort(list);
// 특정 그룹에 속한 인원수
int count = 0;
// 그룹 수
int group_count = 0;
for(int i = 0; i < n; i++){
// 특정 그룹에 인원 추가
count +=1;
// 특정 그룹의 인원이 해당 인원의 공포도와 같거나 크면 그룹결성
if (count >= list[i]) {
group_count +=1;
count = 0;
}
}
// 출력
System.out.println("총 그룹 수: " + group_count);
}
}