📌 그리디 알고리즘이란?
그리디 알고리즘(탐욕 알고리즘)은 문제를 해결하는 과정에서 현재 상황에서 가장 최선이라고 생각되는 선택을 반복적으로 하여 최적의 해를 구하려고 하는 알고리즘이다. 즉, "지금 가장 좋아 보이는 것을 선택하는 것이 최종적으로도 가장 좋은 선택!" 이라는 가정을 기반으로 동작한다. 하지만 항상 최적의 해를 보장하지는 않는다! 그리디 알고리즘이 성공하려면 특정한 조건들이 충족되어야 한다. 😅
🔍 그리디 알고리즘의 주요 특징
1️⃣ 지역 최적해(Local Optimal Solution)
- 현재 단계에서 가장 최선의 선택을 반복적으로 선택
- 이 선택이 전역 최적해(Global Optimal Solution)가 될 것이라고 가정
2️⃣ 단순하고 빠른 해결 방법
- 복잡한 계산 대신 현재 상태에서 최선의 선택을 반복하기 때문에 구현이 단순하고 빠름
3️⃣ 탐욕적 선택 속성
- 매 단계의 선택이 전체 문제를 해결하는 데 영향을 미치지 않거나, 긍정적인 영향을 준다
🔧그리디 알고리즘의 활용
- 최소 비용 문제: 최단 경로 찾기(다익스트라 알고리즘 ), 최소 스패닝 트리(Kruskal, Prim 알고리즘)
- 스케줄링 문제: 회의실 배정 문제, 작업 스케줄링 문제
- 거스름돈 문제: 가장 적은 동전으로 거스름돈을 줄 때
🚫 그리디 알고리즘 사용 시 주의할 점
- 그리디 알고리즘은 항상 최적해를 보장하지는 않는다. 😥
➡️ 모든 경우에 대해 최적의 결과를 보장하려면 탐욕적 선택 속성과 최적 부분 구조를 만족해야 함 - 문제를 풀기 전에 그리디 알고리즘을 사용할 수 있는 조건인지 확인하는 것이 중요함
- 최적해를 보장하지 못하는 경우, 다른 알고리즘(동적 계획법, 완전 탐색 등)을 사용해야 할 수 있음
🥐 그리디 알고리즘 과정
1️⃣ 해 선택:
- 현재 상태에서 가장 최선이라고 생각되는 해를 고름
2️⃣ 적절성 검사:
- 선택한 해가 문제의 제약 조건을 만족하는지 확인
- 조건에 맞지 않으면 선택을 변경하거나 다른 해를 고름
3️⃣ 해 검사:
- 지금까지 선택한 해가 전체 문제를 해결할 수 있는지 검사
- 만약 문제를 해결하지 못했다면 다시 1️⃣로 돌아가 새로운 해를 선택
💡 그리디 알고리즘 동작 방식 예제
거스름돈 문제
💰 문제: 손님에게 거스름돈으로 동전을 가장 적게 줄 수 있는 방법을 찾아라.
🔢 조건: 동전 단위는 500원, 100원, 50원, 10원. (무제한 사용 가능)
1️⃣ 가장 큰 단위 동전(500원)부터 사용.
- 1260 ÷ 500 = 2개 사용 → 남은 금액: 260원
2️⃣ 그다음 큰 단위 동전(100원) 사용.
- 260 ÷ 100 = 2개 사용 → 남은 금액: 60원
3️⃣ 50원 동전 사용.
- 60 ÷ 50 = 1개 사용 → 남은 금액: 10원
4️⃣ 10원 동전 사용.
- 10 ÷ 10 = 1개 사용 → 남은 금액: 0원
결과: 최소 동전 개수는 6개! 🎉
✅ 다음 게시글에서 예제 문제로 더 자세히 이해해보도록 하겠습니다!
[JAVA][Baekjoon] 11047번 동전 0
https://www.acmicpc.net/problem/11047 📌 접근 방식1️⃣ 탐욕적 선택 속성가장 큰 동전부터 최대한 사용하면, 남은 금액을 최소화할 수 있.동전의 가치가 오름차순이며, 각 동전은 이전 동전의 배수이
nyeroni.tistory.com
[JAVA][Baekjoon] 1744번 수 묶기 🌟🌟🌟
https://www.acmicpc.net/problem/1744📌 접근 방식주어진 수열에서 합을 최대화하기 위해 단순히 더하는 대신, 수를 적절히 묶어서 곱하거나 더하는 방식을 사용해야 함 1️⃣ 양수와 음수를 분리양수
nyeroni.tistory.com
[JAVA][Baekjoon] 1931번 회의실 배정 🌟🌟🌟
https://www.acmicpc.net/problem/1931📌 접근 방식1️⃣ 회의실에 최대한 많은 회의를 배정하려면 어떤 기준을 세워야 할까?회의가 겹치지 않게 하려면 현재 회의가 끝난 후에 다음 회의가 시작해야 함따
nyeroni.tistory.com
[JAVA][Baekjoon] 1541번 잃어버린 괄호 🌟🌟🌟
https://www.acmicpc.net/problem/1541📌 접근 방식🔎 문제 요약 : 수식에 괄호를 적절히 추가해 식의 값을 최소로 만드는 방법을 찾는 문제! 😊 1️⃣ '-' 기준으로 나누기"-"를 기준으로 수식을 분리이때
nyeroni.tistory.com
'CS > 알고리즘' 카테고리의 다른 글
[알고리즘] 정수론 : 오일러의 피 (1) | 2025.01.11 |
---|---|
[알고리즘] 정수론 : 소수(Prime number) 구하기 (0) | 2025.01.09 |
[알고리즘] 이진 탐색(Binary Search) (0) | 2025.01.06 |
[알고리즘] 너비 우선 탐색 : BFS(Breadth-First-Search) (0) | 2025.01.06 |
[알고리즘] 깊이 우선 탐색 : DFS(Depth-First-Search) (0) | 2025.01.04 |