CS 기초 · 중급
우선순위 큐(Priority Queue)를 구현할 때 힙(Heap) 자료구조를 사용하는 주된 이유와, 힙의 삽입 및 삭제 연산이 어떻게 동작하는지 설명해주세요.
힌트 · 힙은 O(log N)의 시간 복잡도로 가장 크거나 작은 요소를 빠르게 찾고 삽입/삭제할 수 있어 우선순위 큐에 적합합니다.
시간 복잡도최소 힙/최대 힙완전 이진 트리힙 속성상향식/하향식
모범답안
우선순위 큐를 구현할 때 힙을 사용하는 가장 큰 이유는 효율성입니다. 힙은 O(log N)의 시간 복잡도로 삽입과 삭제 연산을 수행할 수 있기 때문입니다. 우선순위 큐는 가장 높은(또는 가장 낮은) 우선순위를 가진 요소를 빠르게 찾고 제거해야 하는데, 힙은 이러한 요구사항을 완벽하게 충족합니다.
힙은 완전 이진 트리 구조를 가지며, 최소 힙이나 최대 힙이라는 힙 속성을 유지합니다. 최소 힙은 부모 노드가 항상 자식 노드보다 작거나 같고, 최대 힙은 부모 노드가 항상 자식 노드보다 크거나 같습니다.
삽입 연산은 새로운 요소를 트리의 가장 마지막 레벨에 추가한 후, 힙 속성을 만족하도록 부모 노드와 비교하며 위로 올라가는 '상향식(bubble-up)' 과정을 거칩니다. 삭제 연산은 루트 노드를 제거하고, 트리의 가장 마지막 노드를 루트로 옮긴 후, 힙 속성을 만족하도록 자식 노드와 비교하며 아래로 내려가는 '하향식(bubble-down)' 과정을 거칩니다. 이 두 연산 모두 트리의 높이에 비례하는 시간 복잡도를 가지므로 O(log N)이 됩니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 알고리즘 면접 질문
- 동적 계획법(Dynamic Programming)이 그리디(Greedy) 알고리즘과 어떻게 다른지 설명하고, 두 알고리즘이 각각 어떤 문제 유형에 주로 적용되는지 구체적인 예시를 들어주세요.
- 해시 테이블(Hash Table)에서 해시 충돌(Hash Collision)이 발생했을 때 이를 해결하는 대표적인 방법 두 가지를 설명하고, 각각의 장단점을 비교해주세요.
- 이진 탐색 트리(BST)에서 중위 순회(Inorder Traversal)가 어떤 특징을 가지며, 이를 활용하여 어떤 문제를 해결할 수 있는지 설명해주세요.
- 두 개의 포인터(Two Pointers) 기법이 어떤 문제들을 효과적으로 해결할 수 있는지 두 가지 예시를 들고, 각 예시에서 이 기법이 어떻게 적용되는지 설명해주세요.
- 대규모 데이터셋에서 동적 계획법(Dynamic Programming)을 적용할 때, DP 테이블의 크기가 너무 커지거나 상태 전이 비용이 높아져 발생하는 성능 문제를 해결하기 위한 고급 최적화 기법(예: Convex Hull Trick, Divide and Conquer Optimization, Monotonic Queue Optimization)들을 설명하고, 각 기법이 어떤 형태의 점화식에 적용될 수 있는지 구체적인 예시를 들어 설명하시오.
- 네트워크 플로우(Network Flow) 문제 해결을 위한 알고리즘 중 Dinic 알고리즘이 Edmonds-Karp나 Ford-Fulkerson 알고리즘에 비해 실제 환경에서 훨씬 효율적인 이유를 설명하고, Dinic 알고리즘의 핵심 단계인 레벨 그래프 구성과 블로킹 플로우(Blocking Flow)를 찾는 과정을 자세히 설명하시오.