일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준 점프
- 소프티어 장애물인식프로그램
- MySQL완전삭제
- express
- 1987파이썬
- 도커 컨테이너
- 백준 바이러스
- 피아노체조 파이썬
- 백준 점프 파이썬
- CRUD
- MongoDB
- 지도자동구축 파이썬
- 백준알파벳파이썬
- 등수매기기 파이썬
- 파이썬데이터분석라이브러리
- 프로그래머스
- 금고털이 파이썬
- 백준 전쟁 파이썬
- 소프티어 지도자동구축
- 백준 A->B
- 장애물인식프로그램 파이썬
- 백준 피아노체조
- 백준 평범한배낭
- 백준
- jenkins
- express mongodb
- 백준 등수매기기
- 파이썬 평범한배낭
- 백준 예산
- 백준 전쟁-전투
- Today
- Total
바위 뚫는중
[Algorithms] 그리디 알고리즘 Greedy Algorithm - 탐욕 알고리즘 본문
그리디 알고리즘 Greedy Algorithm
최적해를 구하는 데에 사용되는 근사적인 방법,
여러 경우 중 하나를 결정해야 할 때마다 구 순간에 최적이라고 생각되는 것을 선택해 나아가는 방식.
= 당장 눈 앞에 보이는 최적의 선택, 간단하고 빠르지만 항상 최적의 답이 보장되지는 않음.
✅ 그리디 알고리즘 문제 해결법
선택 절차(Selection Procedure): 현재 상태에서의 최적의 해답을 선택한다.
적절성 검사(Feasibility Check): 선택된 해가 문제의 조건을 만족하는지 검사한다.
해답 검사(Solution Check): 원래의 문제가 해결되었는지 검사하고, 해결되지 않았다면 선택 절차로 돌아가 위의 과정을 반복한다.
✅ 그리디 알고리즘 적용에 필요한 조건
그리디 알고리즘은 두가지의 조건이 만족될 경우 최적의 답을 보장함.
아래의 조건이 없어도 그리디 알고리즘을 사용할 수는 있지만, 최적해는 못구함.
- 이전의 선택이 이후에 영향을 주지 않는 ‘탐욕 선택 속성’
- 부분 문제의 최적결과가 전체에도 그대로 적용된다는 ‘최적 부분 구조’
위의 구조를 만족하면, 그리디 알고리즘이 항상 최적해를 찾아낼 수 있다.
이 구조를 매트로이드라고 한다.
✅ 가장 유명한 그리디 알고리즘 예시 - 최소 동전으로 거슬러 주기
거스름돈을 거슬러 줘야하는상황
손님: 최소 동전의 개수로만 거슬러 달라고 요청
나: 최소 동전 개수 → 단위가 큰 500짜리 동전부터 선택하여 점점 작은 동전을 거슬러 줌.
❗️그리디 알고리즘의 문제 해결 과정 적용
1. 선택절차
거스름 돈의 동전 개수를 줄여야 하니 단위가 큰 동전부터 줌
2. 적절성 검사
1번 과정을 통해 선택된 동전들의 합이 거슬러 줄 금액을 초과하는지 검사, 초과하면 가장 마지막에 서택한 동전을 삭제하고 1번과정으로 돌아함
3. 해답 검사
선택된 동전들의 합이 거슬러 줄 금액과 일치하는지 검사, 액수가 부족하면 1번 과정부터 다시 반복
결론
가장 가치가 높은 500원짜리 동전부터 거슬러주고, 잔엑을 확인하고 100원, 50원, 10원 이렇게 거슬러 줌
→ 이 문제 구조는 매트로이드, 탐욕 알고리즘을 사용해도 언제나 최적해를 구할 수 있음
[출처 및 도움을 준 글]
https://hanamon.kr/알고리즘-탐욕알고리즘-greedy-algorithm/
엄청 많이 도움이 된 글! 예시가 이해하기 쉽다.
세상에 너무 똑똑하고 멋진 사람들이 많다.
👶🏻 관련 문제 풀이
https://dev-raeun.tistory.com/30
[BOJ] 백준 11047 동전 Python3
https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1
dev-raeun.tistory.com
https://dev-raeun.tistory.com/31
[BOJ] 백준 13505 주유소 Python3
https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연
dev-raeun.tistory.com
'Algorithms' 카테고리의 다른 글
[BOJ] 백준 13505 주유소 Python3 (0) | 2022.11.02 |
---|---|
[BOJ] 백준 11047 동전 Python3 (0) | 2022.11.02 |
[BOJ] 백준 7568 덩치 Python3 (0) | 2022.10.20 |
[Algorithms] 브루트 포스 알고리즘 (0) | 2022.10.20 |
코딩테스트는 어떻게 준비해나가야 할까? (1) | 2022.10.19 |