자료구조
- 좋아하는 자료구조가 있다면 이유와 함께 설명해주실 수 있을까요?
- 좋아하기보다는 프로젝트를 하면서 많이 사용했던 것
- 해시테이블 : 해시 테이블은 키(Key)를 값(Value)에 매핑하여, 평균적으로 상수 시간(O(1))에 데이터를 검색, 삽입, 삭제할 수 있는 효율적인 자료구조입니다. 이는 많은 양의 데이터를 빠르게 처리해야 하는 경우에 매우 유용합니다. 또한, 해시 테이블의 유연성은 다양한 유형의 데이터를 쉽게 저장하고 관리할 수 있게 해줍니다.
- 스택, 큐에 대해 설명해주실 수 있을까요?
- 스택: 스택은 후입선출(Last In First Out, LIFO) 방식의 자료구조입니다. 이는 마지막에 삽입된 요소가 가장 먼저 나오는 구조를 가지고 있어, 깊이 우선 탐색(DFS) 같은 알고리즘에서 유용합니다.
- 큐: 큐는 선입선출(First In First Out, FIFO) 방식의 자료구조입니다. 이는 가장 먼저 삽입된 요소가 가장 먼저 나오는 구조로, 너비 우선 탐색(BFS) 같은 알고리즘 또는 대기열 관리에 적합합니다.
스택이란 탑처럼 쌓아올리는 형태를 가지며 LIFO의 형태로 제일 마지막에 입력된 데이터가 제일 먼저 나가게 되는 형태입니다. 사용의 대표적인 예로는 웹브라우저의 뒤로가기가 있습니다.
- 배열, 링크드리스트를 비교하여 설명해주실 수 있을까요?
- 배열: 배열은 메모리에 연속적으로 데이터를 저장합니다. 이로 인해 인덱스를 통한 빠른 접근이 가능하지만, 크기 변경이 어렵고 삽입 및 삭제 연산에서 비효율적일 수 있습니다.
- 링크드 리스트: 링크드 리스트는 각 요소가 포인터를 통해 연결된 구조입니다. 배열과 달리 메모리를 비연속적으로 사용하여 크기 변경이 유연하고, 삽입 및 삭제가 용이하지만, 특정 요소에 접근하기 위해서는 순차적 탐색이 필요합니다.
링크드리스트는 배열과 다르게 노드라는 개념이 사용됩니다. 노드들이 순차적으로 연결되어있는 형태의 자료구조이며, 각 노드들은 저장할 데이터와 다음 노드를 가리키는 포인터를 가지게 됩니다.
배열과 달리 연속적으로 저장되어있지 않기때문에 인덱스 번호로 데이터 접근이 불가하며, 배열에 비해 데이터 삭제와 삽입에 용이합니다.
- 해시테이블의 원리, 충돌 해소 전략에 대해 설명해주실 수 있을까요?
- 원리: 해시 테이블은 해시 함수를 사용해 키를 해시 코드로 변환하고, 이 코드를 사용하여 값을 저장하거나 검색합니다. 해시 함수는 데이터를 효율적으로 분산시켜야 합니다.
- 충돌 해소 전략:
- 체이닝(Chaining): 충돌이 발생하면, 같은 해시 버킷에 연결 리스트로 요소를 추가합니다.
- 오픈 어드레싱(Open Addressing): 충돌이 발생하면, 빈 버킷을 찾을 때까지 다른 버킷으로 이동합니다. 선형 탐색, 제곱 탐색, 이중 해싱 등의 방법이 있습니다.
- 우선순위 큐의 시간복잡도는 어떻게 되며 그 이유는 무엇인지 설명해주실 수 있을까요?
- 우선순위 큐는 각 요소가 우선순위를 가지고 있으며, 우선순위가 높은 요소부터 제거됩니다. 이는 힙(Heap)과 같은 자료구조를 사용하여 구현됩니다.
- 삽입 연산: O(log n), 우선순위에 따라 적절한 위치에 요소를 삽입하기 위해 힙을 재정렬합니다.
- 삭제 연산: O(log n), 힙의 루트(가장 높은 우선순위의 요소)를 제거하고, 힙을 재정렬합니다.
- 이러한 시간 복잡도는 힙의 특성 때문에 발생합니다. 힙은 완전 이진 트리의 형태를 취하며, 각 연산마다 트리의 높이에 비례하는 시간이 소요됩니다.
'기록하기' 카테고리의 다른 글
면접 복기하기(2) (0) | 2024.01.24 |
---|---|
모의면접 복기하기 (1) | 2024.01.21 |
CS 자주 나오는 질문 정리 (1) (0) | 2024.01.19 |
프로젝트 마무리하면서 정리하기 (1) | 2024.01.08 |
문제 정리하기 (3) (0) | 2024.01.02 |