728x90
그리디 알고리즘 (Greedy Algorithm)
Greedy : 탐욕스러운
각 단계에서 최적의 선택을 하는 방식(=Greedy) 으로 최종 답에 도달하는 알고리즘을 말한다. 단, 항상 최적의 해를 구할 수 있는 것이 아니고 특정한 경우에만 그리디 알고리즘으로 최적의 해에 도달할 수 있다.
**특정한 경우 == 최적의 해를 보장할 수 있는 경우
예시) 백준 11399 ATM (Python)
줄 선 사람들이 돈을 인출하는데 걸리는 시간의 합의 최솟값을 구해야한다. 각 사람이 소요되는 시간은 이전 사람들이 걸리는 시간 + 내가 걸리는 시간 이다.
각 단계의에서 최적의 선택을 하여 최종 해에 도달 할 수 있다는 것을 보장할 수 있는가?
이 경우 입력받은 걸리는 시간들을 오름차순 정렬하여 각 단계에서 (앞사람들이 걸리는 시간 + 내가 걸리는 시간)을 순차적으로 더해준다면 최종걸리는 시간의 합이 최솟값이라는 것이 보장된다.
Python Code
import sys
n = int(sys.stdin.readline().strip())
arr = list(map(int,sys.stdin.readline().strip().split()))
res = 0
temp = 0
arr.sort() #오름차순 정렬
for i in arr: #가장 작은 값부터 순차적으로 순회
temp += i #temp : 내가 걸린 총 시간
res += temp #res : 각 사람이 걸린 총 시간의 합
print(res)
728x90
반응형
'Data structure & Algorithm' 카테고리의 다른 글
[Algoritnm] 깊이 우선 탐색 (DFS, Depth-first Search) (0) | 2024.01.20 |
---|---|
[Data structure] 스택(Stack), 큐(Queue) (1) | 2024.01.11 |
[Algorithm] 이분탐색 (Binary Search) - 변형 (0) | 2024.01.04 |
[Algorithm] 최대공약수 (0) | 2023.12.25 |
[Algorithm] 이분탐색 (Binary Search) (0) | 2023.12.11 |