나는야 욕심쟁이!
미래를 생각하지 않고 각 단계에서 가장 최선의 선택을 하는 기법
= 지역적으로는 최적의 선택이지만 최종적으로는 최적의 선택이라는 보장이 없음
위의 조건이 성립하지 않아도 그리디 알고리즘은 주로 계산 속도가 빠르기 때문에 근사 알고리즘으로 사용이 가능할 수 있다.
근사 알고리즘 (Approximation Algorithm): 최적화 문제에 대한 해의 근사값을 구하는 알고리즘으로, 가장 최적화되는 답을 구할 수는 없어도 비교적 빠른 시간 내에 어느 정도 보장된 근사해를 계산할 수 있다.
선택절차 (Selection Procedure), 적절성 검사 (Feasibility Check), 해답 검사 (Solution Check)
매트로이드: 탐욕 알고리즘이 언제나 최적해를 찾아내는 특별한 구조
(예) 편의점에서 손님이 과자를 3150원어치 사고, 5000원을 냈을 때 최소한의 동전 개수로 잔돈을 거슬러줄 수 있는 방법은? 잔돈은 동전으로만 준다고 가정한다.
n = 1850
count = 0
coins = [500, 100, 50, 10]
for coin in coins:
count += n // coin
n %= coin
print(count)
같이 빨리 해보긔: 12845
각자 풀어보긔:
투포인터: 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘
포인터가 두개!
전체 for loop을 돌리면 시간초과 나는 경우 등
start
, end
과 같은 포인터 2개를 준비한다 (또는 left
, right
)start = end = 0
이고, start <= end
조건을 항상 만족한다
start = end
인 배열은 크기가 0인, 아무것도 포함하지 않은 배열이다
참조:
https://hanamon.kr/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%83%90%EC%9A%95%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-greedy-algorithm/
https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Algorithm/%ED%88%AC%ED%8F%AC%EC%9D%B8%ED%84%B0%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98.md