CS 기초 · 중급
해시 테이블(Hash Table)에서 해시 충돌(Hash Collision)이 발생했을 때 이를 해결하는 대표적인 방법 두 가지를 설명하고, 각각의 장단점을 비교해주세요.
힌트 · 체이닝은 연결 리스트를 사용하고, 오픈 어드레싱은 빈 슬롯을 찾아 이동합니다. 각각 메모리 사용량과 탐색 성능에 영향을 줍니다.
분리 연결법개방 주소법체이닝선형 탐사클러스터링
모범답안
해시 테이블에서 해시 충돌을 해결하는 대표적인 방법은 체이닝(Chaining)과 오픈 어드레싱(Open Addressing)이 있습니다.
체이닝은 각 해시 값에 연결 리스트를 연결하여 충돌이 발생하면 해당 리스트에 새로운 노드를 추가하는 방식입니다. 장점은 구현이 비교적 간단하고 삭제가 용이하며, 테이블이 꽉 차더라도 어느 정도 성능을 유지할 수 있다는 점입니다. 단점은 연결 리스트를 위한 추가적인 메모리 공간이 필요하고, 최악의 경우 탐색 시간이 O(n)까지 늘어날 수 있다는 것입니다.
오픈 어드레싱은 충돌이 발생하면 미리 정해진 규칙에 따라 해시 테이블 내의 다른 빈 슬롯을 찾아 데이터를 저장하는 방식입니다. 선형 탐사, 이차 탐사, 이중 해싱 등이 있습니다. 장점은 추가적인 메모리 오버헤드가 없다는 점입니다. 단점은 테이블이 꽉 찰수록 성능이 급격히 저하될 수 있고, 특히 선형 탐사의 경우 클러스터링 문제가 발생하여 탐색 효율이 떨어질 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 알고리즘 면접 질문
- 퀵 정렬(Quick Sort)과 병합 정렬(Merge Sort)의 동작 원리를 비교하고, 각각 어떤 상황에서 더 효율적인지 시간 복잡도와 공간 복잡도 측면에서 설명해주세요.
- 특정 네트워크에서 최단 경로를 찾아야 할 때 너비 우선 탐색(BFS)과 깊이 우선 탐색(DFS) 중 어떤 알고리즘을 선택해야 하며, 그 이유는 무엇인지 설명해주세요.
- 동적 계획법(Dynamic Programming)이 그리디(Greedy) 알고리즘과 어떻게 다른지 설명하고, 두 알고리즘이 각각 어떤 문제 유형에 주로 적용되는지 구체적인 예시를 들어주세요.
- 이진 탐색 트리(BST)에서 중위 순회(Inorder Traversal)가 어떤 특징을 가지며, 이를 활용하여 어떤 문제를 해결할 수 있는지 설명해주세요.
- 우선순위 큐(Priority Queue)를 구현할 때 힙(Heap) 자료구조를 사용하는 주된 이유와, 힙의 삽입 및 삭제 연산이 어떻게 동작하는지 설명해주세요.
- 두 개의 포인터(Two Pointers) 기법이 어떤 문제들을 효과적으로 해결할 수 있는지 두 가지 예시를 들고, 각 예시에서 이 기법이 어떻게 적용되는지 설명해주세요.