CS 기초 · 중급
동적 계획법(Dynamic Programming)이 그리디(Greedy) 알고리즘과 어떻게 다른지 설명하고, 두 알고리즘이 각각 어떤 문제 유형에 주로 적용되는지 구체적인 예시를 들어주세요.
힌트 · 동적 계획법은 부분 문제의 해를 저장하여 재활용하는 반면, 그리디는 각 단계에서 지역적으로 최적의 선택을 합니다.
최적 부분 구조중복 부분 문제탐욕적 선택 속성전역 최적해메모이제이션
모범답안
동적 계획법과 그리디 알고리즘은 둘 다 최적화 문제를 해결하는 방법이지만, 접근 방식에 차이가 있습니다. 동적 계획법은 문제를 작은 부분 문제로 나누어 해결하고, 그 결과를 저장하여 중복 계산을 피합니다. 즉, "최적 부분 구조"와 "중복 부분 문제"라는 특징을 가집니다. 예를 들어, 피보나치 수열이나 최단 경로 문제를 풀 때 유용합니다.
반면, 그리디 알고리즘은 각 단계에서 "탐욕적 선택 속성"을 만족하는, 즉 당장 눈앞에 보이는 최적의 선택을 합니다. 하지만 이 지역적인 최적해가 항상 전역적인 최적해를 보장하지는 않습니다. 대표적인 예시로, 거스름돈 문제를 해결할 때 가장 큰 단위의 동전부터 사용하는 방법이 있습니다.
따라서, 문제의 특성에 따라 적절한 알고리즘을 선택해야 합니다. 동적 계획법은 최적해를 보장하지만, 계산 비용이 높을 수 있고, 그리디 알고리즘은 빠르지만 최적해를 보장하지 못할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 알고리즘 면접 질문
- 해시 테이블(Hash Table) 자료구조는 무엇이며, 해싱(Hashing)의 기본 원리와 충돌(Collision)이 발생했을 때 해결하는 일반적인 방법 두 가지를 설명해주세요.
- 퀵 정렬(Quick Sort)과 병합 정렬(Merge Sort)의 동작 원리를 비교하고, 각각 어떤 상황에서 더 효율적인지 시간 복잡도와 공간 복잡도 측면에서 설명해주세요.
- 특정 네트워크에서 최단 경로를 찾아야 할 때 너비 우선 탐색(BFS)과 깊이 우선 탐색(DFS) 중 어떤 알고리즘을 선택해야 하며, 그 이유는 무엇인지 설명해주세요.
- 해시 테이블(Hash Table)에서 해시 충돌(Hash Collision)이 발생했을 때 이를 해결하는 대표적인 방법 두 가지를 설명하고, 각각의 장단점을 비교해주세요.
- 이진 탐색 트리(BST)에서 중위 순회(Inorder Traversal)가 어떤 특징을 가지며, 이를 활용하여 어떤 문제를 해결할 수 있는지 설명해주세요.
- 우선순위 큐(Priority Queue)를 구현할 때 힙(Heap) 자료구조를 사용하는 주된 이유와, 힙의 삽입 및 삭제 연산이 어떻게 동작하는지 설명해주세요.