contiguous-memorypointerrandom-access
Array와 Linked List의 차이를 설명해 주세요
- 면접 출제
- 예상 시간
- 5분
30초 답변
꼬리질문
조금 더 깊게 물어본다면
답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.
배열에서 임의 위치 삽입과 삭제가 O(n)인 이유는?
Array의 인덱스 접근이 O(1)인 이유는 무엇인가요?
Linked List의 단점은 무엇인가요?
CPU 입장에서는 어느 쪽이 부담이 적나요?
중간 삭제는 Linked List가 항상 O(1)인가요?
동적 배열은 일반 Array와 무엇이 다른가요?
어떤 상황에서 Linked List를 고려할 수 있나요?
동적 배열을 복제할 때 내부적으로 어떻게 동작하나요?
Python list는 서로 다른 타입을 담아도 인덱스 접근이 O(1)인 이유는?
대부분이 0이고 일부만 값이 있는 데이터는 어떤 자료구조가 좋나요?
시간 복잡도
부가 설명
둘의 차이는 저장 방식에서 시작됩니다. Array는 값들이 연속된 공간에 놓이기 때문에 arr[10]처럼 바로 위치를 계산할 수 있습니다. 반면 Linked List는 각 노드가 다음 노드의 위치를 들고 있어서, 열 번째 값을 보려면 앞에서부터 링크를 따라가야 합니다.
시간복잡도만 보면 Linked List가 중간 삽입에 항상 유리해 보일 수 있습니다. 하지만 삽입할 위치의 노드를 이미 알고 있을 때만 빠르고, 그 위치를 찾는 데 이 걸릴 수 있습니다. 실제 CPU 캐시 관점에서는 연속 메모리를 쓰는 Array가 순회에서 더 빠른 경우도 많습니다.
한 줄 정리
Array는 바로 찾기 좋고, Linked List는 연결을 바꾸기 좋지만 위치를 찾는 비용을 숨기면 안 됩니다.