Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions 알고리즘/탐욕알고리즘.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 탐욕 알고리즘
현재 상황에서 가장 최선의 선택을 고르는 알고리즘이다. 탐욕 알고리즘은 동적 프로그래밍을 간단한 문제 해결에 사용하면 지나치게 많은 일은 한다는 것에서 착안하여 고안된 알고리즘이다.

## 탐욕 알고리즘의 조건
* 탐욕적인 선택은 항상 안전하다는 것이 보장되어야 한다.
> ```안전하다``` 라는 것은 이 선택으로 인해 전체 문제의 최적해를 도출할 수 있어야 한다는 것이다.

* 문제의 여러 단계에서 전부 최적해가 도출되어야 한다.

## 탐욕 알고리즘의 단계
1. 문제의 최적해 구조를 결정

2. 문제의 구조에 맞게 선택 절차를 정의

3. 선택 절차에 따라 선택을 수행

4. 선택된 해가 문제의 조건을 만족하는지 검사

5. 조건을 만족하지 않으면 해당 해를 제외

6. 모든 선택이 완료되면 해답 검사

7. 조건을 만족하지 않으면 해답으로 인정되지 않음

## 탐욕 알고리즘 예시

거스름돈 계산 알고리즘

```Kotlin
fun main() = with(System.`in`.bufferedReader()) {
var money = readLine().toInt // 거스름돈

// 1. 선택 절차 적용
val coins = [500, 100, 50, 10]

var count = 0
val map = HashMap<Int, Int>()

// 2. 적절성 검사
for (i in coins) {
count += money / i
money %= i
map.put(i, money / i)
}

// 3. 해답 검사
if(money == 0)
for(i in map) {
println("${i.first} : ${i.second}")
}
}

```