Greedy Algorithm[탐욕 알고리즘]이란?
각 단계에서 가장 최선의 선택지(가장 큰, 가장 작은 등)를 고르는 것.
Greedy 알고리즘은 구현이 쉽다는 장점이 있지만, 항상 최선의 답을 구하는 것은 아니다.
Greedy Algorithm을 활용 가능한 문제
1) 거스름돈
x라는 금액의 거스름돈이 주어야할 때, 10,000원, 5,000원, 1,000원, 500원, 100원으로 가장 적은 갯수의 거스름 돈을 주어야하는 상황
#include <iostream>
using namespace std;
int main(){
int x, cnt = 0;
cin >> x;
// 가장 큰 액수의 화폐부터 선택
cnt += x / 10000;
x = x % 10000;
cnt += x / 5000;
x = x % 5000;
cnt += x / 1000;
x = x % 1000;
cnt += x / 500;
x = x % 500;
cnt += x / 100;
cout << cnt;
}
2) Task Scheduling Problem
운영 체제에서 사용하는 방법으로 프로세스의 총 대기시간을 최소로 줄어야하는 상황
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n; // process 개수
vector <int> v; // prcess 당 burst time
int wait = 0;
cin >> n;
for(int i = 0; i < n; i++){
int tmp;
cin >> tmp;
v.push_back(tmp);
}
// burst time이 가장 적은 process부터 실행
sort(v.begin(), v.end());
for(int i = 0; i < n; i++){
for(int j = 0; j < i; j++){
wait += v[j];
}
}
cout << wait;
}
'CS > Algorithm' 카테고리의 다른 글
[알고리즘] 최장 공통 부분수열(LCS, Longest Common Subsequence) (0) | 2020.03.02 |
---|---|
[알고리즘] 최장 증가 수열(LIS, Longest Increasing Subsequence) (0) | 2020.03.02 |
[알고리즘] 에라토스테네스의 체 (0) | 2020.02.27 |
[알고리즘] 되추적(Backtracking) 알고리즘 (0) | 2020.02.16 |
[알고리즘] 너비 우선 탐색(BFS : Breadth First Search) 알고리즘 (0) | 2020.01.14 |
댓글