'C++' Greedy Algorithm

토스트·2025년 4월 27일
0

Algorithms in C++

목록 보기
2/6

탐욕법 (Greedy Algorithm)

매 선택에서 최적이라고 생각되는 결정을 내리면서 문제를 해결하는 알고리즘입니다.
즉, 전체 문제를 해결하기 위한 최적의 해답을 구하기 위해, 각 단계에서 가장 좋다고 생각되는 선택을 하여 '근사치를 추정'하는 방식입니다.
그리디 알고리즘은 항상 전체 문제에 대한 최적의 해를 보장하는 것은 아닙니다.

  • 최적의 해 조건 1 : Greedy Choice Property
    앞의 선택이 이후의 선택에 영향을 주지 않을 경우

  • 최적의 해 조건 2 : Optimal Substructure
    문제의 최적해가 작은 문제의 최적해로부터 구성되는 경우

<예시 : 동전 문제>

#include <iostream>

using namespace std;

int main() {
	int price = 3770; // 받야아 할 돈
	int coin[] = { 500, 100, 50, 10 }; // 잔돈 종류
	int change = 0; // 거스름돈의 수
	
	for (int i = 0; i < sizeof(coin) / sizeof(int); ++i) {
		while (price >= coin[i]) {
			price -= coin[i];
			++change;
		}
	}
	
	// 500원 7개, 100원 2개, 50원 1개, 10원 2개
	// 총 12개
	cout << change;

	return 0;
}

만약 350원 동전이 생긴다면?
최적 해: 500원 6개, 350원 2개, 100원 0개, 50원 1개, 10원 2개로 | total : 11개
실제 해 : 500원 7개, 350원 0개, 100원 2개, 50원 1개, 10원 2개 | total : 12개

0개의 댓글