일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컴퓨터네트워크
- 종류
- linux
- 데브코스
- 데이터 파이프라인
- TCP
- 데이터 웨어하우스
- PYTHON
- airflow.cfg
- 데이터 엔지니어링
- 가상환경
- HADOOP
- 운영체제
- Django
- airflow
- 컴퓨터 네트워크
- 자료구조
- http
- sql
- Docker
- AWS
- Go
- 데이터베이스
- redshift
- S3
- 정리
- 데이터엔지니어링
- 파이썬
- TIL
- dockerfile
- Today
- Total
홍카나의 공부방
[Algorithm] 그리디 알고리즘 정리 + 백준 추천 문제 본문
그리디 알고리즘(Greedy Algorithm)은 '탐욕(Greedy)'이라는 이름에 알맞게
지금 당장 가질 수 있는 최고의 이익을 따라가는 알고리즘을 의미한다.
모든 경우 최적해를 보장하지는 못하지만,
드물게 최적해를 결과로 내는 경우도 있다.
합리적인 시간 내로 최적에 가까운 해답을 찾을 수 있다는 점에서 유용한 알고리즘이다.
그리디 알고리즘이 잘 작동하는 문제들은
이전의 선택이 이후의 선택에 영향을 주지 않는 문제들이 많다.
물론 꼭 그렇지 않더라도 괜찮은 정답을 찾을 수 있는 알고리즘이다.
다이나믹 프로그래밍(DP)과는 최적 부분 구조 문제를 푼다는 점에서 약간 다른데,
DP가 하위 문제에 대한 최적의 솔루션을 찾은 다음, 이를 이용한 전역 최적 솔루션을 찾는 것이라면
그리디는 각 단계마다 지역 최적해를 찾는 문제로, 문제를 더 작게 줄여나가는 형태다.
코딩테스트에서 어느정도 인기 있는 유형이고,
문제의 난이도가 좀 높아지면 스택, 우선순위 큐 등의 자료구조와 엮어서 푸는 문제들도 종종 보인다.
그리디 알고리즘으로 풀 수 없는 문제도 존재한다.
대표적인 예로 트리 구조에서 가장 큰 합을 구하는 문제가 있다.
루트 노드인 2부터 시작해서 탐색하는 자식 노드의 숫자들을 더하고
결과적으로 가장 큰 합을 만들기 위해서 그리디 알고리즘으로 접근한다고 가정하자.
그렇다면 위 그림처럼 각 level에서 큰 값을 취해 2 -> 9 -> 14를 결과로 내게 될 것이다.
하지만 2 -> 3 -> 50을 따라가면 훨씬 큰 값을 output으로 낼 수 있지만
그리디 알고리즘으로는 50 노드를 찾아갈 수 없다.
루트 노드에서 3과 9중 그리디 알고리즘 방식을 택한다면 3을 택하지 않을 것이기 때문이다.
해당 문제는 이진트리를 정렬한다든지 작업을 해주지 않는 이상 그리디로 풀 수 없다.
그리디 알고리즘 백준 추천 문제
20300 - 서강근육맨 (실버 3)
20365 - 블로그2 (실버 3)
11501 - 주식 (실버 2)
11000 - 강의실 배정(골드 5)
2212 - 센서 (골드 5)
2141 - 우체국 (골드 4)
2812 - 크게 만들기 (골드 3)
'Data Structure + Algorithm' 카테고리의 다른 글
[자료구조] 기수 정렬(Radix Sort) (0) | 2024.08.05 |
---|---|
[자료구조] 머지 소트(Merge Sort, 합병 정렬) (0) | 2024.08.05 |
[자료구조] Heap의 개념과 연산, 시간 복잡도 (1) | 2024.07.25 |
[Algorithm] 최단 경로 찾기 - 다익스트라 알고리즘 (0) | 2023.06.07 |
[Algorithm] 이진 탐색 정리 (0) | 2023.03.06 |