CS 기초 · 기초
배열(Array)과 연결 리스트(Linked List)의 주요 차이점은 무엇이며, 각각 어떤 상황에서 더 효율적인 자료구조인지 구체적인 예를 들어 설명해주세요.
힌트 · 배열은 연속된 메모리 할당으로 인덱스 접근이 빠르지만 크기 변경이 어렵고, 연결 리스트는 비연속적 할당으로 삽입/삭제가 용이하지만 탐색이 느립니다.
연속적인 메모리포인터임의 접근삽입/삭제캐시 효율성
모범답안
배열과 연결 리스트는 데이터를 저장하는 기본적인 자료구조이지만, 메모리 구조와 동작 방식에 큰 차이가 있습니다.
배열은 메모리에 연속적으로 할당되어 있어 인덱스를 통해 상수 시간(O(1))으로 데이터에 접근할 수 있다는 장점이 있습니다. 하지만 크기를 변경하기 어렵고, 중간에 데이터를 삽입하거나 삭제할 때 다른 요소들을 이동시켜야 하므로 비효율적입니다. 예를 들어, 정렬된 데이터를 유지해야 하는 경우, 새로운 데이터를 삽입할 때 배열은 삽입 위치 이후의 모든 데이터를 이동시켜야 합니다.
반면, 연결 리스트는 각 요소가 포인터를 통해 다음 요소를 가리키는 방식으로, 메모리에 비연속적으로 할당됩니다. 따라서 삽입/삭제 연산이 상수 시간(O(1))으로 가능하지만, 특정 위치의 데이터를 찾기 위해서는 처음부터 순차적으로 탐색해야 하므로 탐색 시간이 오래 걸립니다(O(n)). 예를 들어, 빈번하게 데이터의 삽입/삭제가 일어나는 편집기나 플레이리스트 관리 시스템에 연결 리스트가 더 적합합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 알고리즘 면접 질문
- 알고리즘의 시간 복잡도(Time Complexity)와 공간 복잡도(Space Complexity)는 무엇이며, 왜 중요하게 고려해야 하는지 설명해주세요. 특히 Big O 표기법은 무엇을 의미하나요?
- 스택(Stack)과 큐(Queue) 자료구조의 정의와 각각 LIFO(Last-In, First-Out) 및 FIFO(First-In, First-Out) 원리를 설명하고, 실제 프로그래밍에서 사용되는 예를 들어주세요.
- 이진 탐색(Binary Search) 알고리즘은 어떻게 동작하며, 이 알고리즘을 사용하기 위한 데이터의 전제 조건은 무엇인가요? 시간 복잡도는 어떻게 되나요?
- 버블 정렬(Bubble Sort) 알고리즘의 동작 원리를 설명하고, 이 알고리즘의 시간 복잡도와 실제 시스템 개발에서 잘 사용되지 않는 이유를 함께 설명해주세요.