기초 개념, 기술 면접 대비

자료구조 면접 퀴즈

효율적인 데이터 관리의 기초

배열, 연결리스트, 스택, 큐, 트리, 그래프 등 핵심 자료구조를 마스터하세요. 면접에서 자주 나오는 시간/공간 복잡도 분석까지.

로그인 없이 풀어보기
55개 문제, 무료

학습할 핵심 개념

배열과 동적 배열
연결리스트 (단일/이중)
스택과 큐
해시테이블
트리 (이진, BST, AVL)
그래프 (DFS, BFS)
힙과 우선순위 큐

핵심 개념 미리보기

자료구조 면접에서 꼭 나오는 개념을 미리 확인하세요

배열 (Array)

핵심

연속된 메모리에 같은 크기로 놓기 때문에 인덱스로 위치를 계산할 수 있고, 그래서 임의 접근이 O(1) 입니다.

배열 (Array)

메모리 구조

시작 주소에 칸 크기를 곱해 더하면 몇 번째든 한 번에 자리를 찾는다 칸 크기가 같다 0 3 시작 더하기 3 곱하기 칸 크기 몇 번째든 계산 한 번으로 자리가 나온다 그런데 중간에 끼워 넣으면 뒤를 다 밀어야 한다 붙어 있다는 성질이 빠른 접근과 비싼 삽입을 동시에 만든다
인덱스01234
값1020304050
주소100104108112116

주소가 4씩 일정하게 늘어납니다. 연속된 메모리 공간에 놓이기 때문입니다.

시간 복잡도

연산복잡도이유
인덱스 접근O(1)주소 = 시작 + index × size
뒤에 추가O(1)배열 확장 시 O(n)
앞/중간 삽입O(n)뒤 요소 전부 시프트
삭제O(n)빈 공간 메우기
탐색 (미정렬)O(n)순차 탐색
탐색 (정렬)O(log n)이진 탐색 가능

실무 포인트

  • 캐시 지역성: 연속 메모리라 CPU 캐시 히트율 높음
  • Java ArrayList: 내부적으로 배열. 조회 많으면 유리
  • 동적 배열: 용량 초과 시 2배로 확장 후 복사 (amortized O(1))

왜 붙어 있는 것이 빠른가

칸의 위치를 계산으로 얻는 것은 절반입니다. 나머지 절반은 한 번 읽을 때 주변까지 같이 가져온다는 점입니다.

훑는 방식왜 차이가 나나
앞에서 뒤로 순서대로가져온 덩어리 안의 값들을 다 쓴다
띄어 가며 접근덩어리마다 한 값만 쓰고 버린다
2차원을 열 방향으로행마다 다른 덩어리라 매번 새로 가져온다

같은 원소 수인데 몇 배가 갈립니다. 그래서 2차원 배열은 저장된 방향과 같은 방향으로 훑습니다. 이것이 알고리즘 표기에는 안 나타나지만 실제 시간에는 나타납니다.

늘어날 때 무슨 일이 일어나나

크기가 정해진 배열이라 넘치면 새로 만들어 옮깁니다.

넘칠 때마다 크기를 두 배로 잡는다
그래서 옮기는 비용을 나눠 보면 넣는 것이 일정한 시간에 가깝다
다만 그 순간 하나는 원소 수만큼 걸린다

셋째가 지연 그래프의 튀는 점입니다. 넣을 개수를 미리 알면 처음부터 그만큼 잡아 옮기기를 없앱니다.

면접 키워드

"배열은 왜 인덱스 접근이 O(1)인가?" → 연속 메모리 + 주소 계산

면접에서 이렇게 나옵니다
  • Q.배열에서 인덱스 접근이 O(1)인 이유를 설명해주세요
  • Q.동적 배열(ArrayList)의 확장 방식을 설명해주세요
  • Q.배열 vs 연결리스트, 캐시 효율 관점에서 비교해주세요

연결 리스트 (Linked List)

핵심

각 노드가 다음 노드를 포인터로 가리킵니다. 위치를 계산할 수 없어 순차 접근만 되고, 대신 삽입과 삭제에서 원소를 밀지 않습니다.

연결 리스트 (Linked List)

구조

칸마다 다음 칸의 자리를 들고 있어서 끼워 넣기가 연결만 바꾸는 일이 된다 값 값 값 오른쪽 칸이 다음 자리 중간에 끼워 넣으면 새 값 연결 둘만 바꾼다 뒤를 밀지 않는다. 대신 몇 번째를 찾으려면 처음부터 따라간다 그래서 자주 끼워 넣고 순서대로만 읽으면 이쪽이 맞는다
단일 연결 리스트:
[10|→] → [20|→] → [30|→] → null
 head

이중 연결 리스트:
null ← [←|10|→] ⇄ [←|20|→] ⇄ [←|30|→] → null
         head                        tail

시간 복잡도

연산복잡도이유
앞에 삽입O(1)head 포인터만 변경
뒤에 삽입O(1)tail 포인터 있을 때
중간 삽입O(n)위치까지 순회 필요
인덱스 접근O(n)순차 탐색만 가능
삭제O(1)노드 참조 있을 때

배열 vs 연결 리스트

항목배열연결 리스트
메모리연속 할당분산 할당
캐시 효율높음낮음
삽입/삭제O(n)O(1)
랜덤 접근O(1)O(n)

중간 삽입이 빠르다는 말의 조건

노드를 알고 있으면 잇는 것은 즉시 끝납니다. 다만 그 노드를 찾는 것은 앞에서부터 세어야 합니다.

하려는 것실제 비용
이미 손에 든 노드 뒤에 넣기즉시
다섯 번째 뒤에 넣기다섯 번 걸어간 다음 즉시
특정 값을 찾아 지우기찾는 데 전체를 훑을 수 있다

그래서 이 자료구조는 순회하면서 넣고 빼는 경로에서 값이 있습니다. 위치로 접근하는 경로에서는 배열이 낫습니다. 표기상 같은 O(1) 이라도 조건이 다릅니다.

흩어져 있는 대가

노드가 메모리 곳곳에 있어 순서대로 훑어도 붙어 있는 배열보다 느립니다.

노드마다 다음 위치를 따라가야 한다
가져온 덩어리 안에 다음 노드가 있을 보장이 없다
노드마다 다음을 가리키는 공간이 따로 든다

셋째도 작지 않습니다. 작은 값을 많이 담으면 값보다 연결 정보가 차지하는 몫이 커집니다. 그래서 실무 목록은 대부분 배열 기반입니다.

실무 포인트

  • Java LinkedList: Deque 인터페이스 구현 (큐/스택 모두 가능)
  • LRU 캐시: 이중 연결 리스트 + 해시맵 조합
  • 실무에서는 캐시 지역성 때문에 ArrayList가 대부분 빠름
면접에서 이렇게 나옵니다
  • Q.연결 리스트의 장단점을 설명해주세요
  • Q.LRU 캐시를 연결 리스트로 구현하는 방법은?
  • Q.단일 vs 이중 연결 리스트 차이는?

배열 vs 연결리스트

핵심

배열은 연속된 메모리에 놓여 임의 접근(인덱스로 바로 접근)이 O(1) 이고, 연결 리스트는 흩어져 있어 순서대로 따라가야 합니다. 이 차이에서 나머지 성능 특성이 갈립니다.

배열 vs 연결리스트

데이터를 순서대로 저장하는 두 가지 기본 자료구조. 메모리 구조와 성능 특성이 정반대.

메모리 구조

배열은 연속이라 한 번 읽으면 여러 칸이 함께 오고 연결리스트는 흩어져 하나씩 읽는다 배열. 값이 붙어 있다 한 번 읽어 여섯 칸이 온다 연결리스트. 값이 흩어져 있다 따라가며 하나씩 칸마다 따로 읽어야 해서 같은 개수를 세는 데 더 걸린다 복잡도는 같아도 실제 속도가 다른 이유가 이것이다 대신 중간에 끼워 넣는 것은 연결리스트가 값싸다
[배열] 연속된 메모리
┌───┬───┬───┬───┬───┐
│ A │ B │ C │ D │ E │
└───┴───┴───┴───┴───┘
0x100 104 108 10C 110

[연결리스트] 흩어진 메모리
┌───┬──┐  ┌───┬──┐  ┌───┬──┐
│ A │ →├─→│ B │ →├─→│ C │ ∅│
└───┴──┘  └───┴──┘  └───┴──┘
0x200     0x500     0x300

시간 복잡도 비교

연산배열연결리스트
인덱스 접근O(1)O(N)
앞에 삽입O(N)O(1)
뒤에 추가O(1)*O(1)
중간 삽입O(N)O(1)+탐색
검색O(N)O(N)
메모리연속 필요분산 가능

*동적 배열 amortized

언제 무엇을 쓸까?

상황선택이유
인덱스로 자주 접근배열O(1) 접근
삽입/삭제 빈번연결리스트O(1) 삽입
크기 고정배열메모리 효율
크기 가변적연결리스트동적 할당
캐시 성능 중요배열캐시 지역성

캐시 지역성 (실무에서 중요!)

[배열] CPU 캐시에 한번에 로드
→ 연속 메모리 → 캐시 히트율 높음
→ 실제 성능 우수

[연결리스트] 메모리 곳곳에 흩어짐
→ 캐시 미스 빈번 → 실제 성능 저하

→ 실무에서는 배열(ArrayList)이 대부분 유리

면접에서 이렇게 나옵니다
  • Q.배열과 연결리스트의 차이를 설명해주세요.
  • Q.배열과 연결리스트의 시간복잡도 차이를 설명해주세요
  • Q.배열의 삽입이 O(N)인 이유는?

더 많은 개념과 문제는 가입 후 이용할 수 있어요

먼저 5문제 맛보기

자료구조 면접 빈출 질문

실제 면접에서 자주 나오는 질문들입니다

Q.

배열에서 인덱스 접근이 O(1)인 이유를 설명해주세요

배열 (Array) 개념 정리 보기
Q.

동적 배열(ArrayList)의 확장 방식을 설명해주세요

배열 (Array) 개념 정리 보기
Q.

배열 vs 연결리스트, 캐시 효율 관점에서 비교해주세요

배열 (Array) 개념 정리 보기
Q.

배열에서 중간 삽입이 O(n)인 이유는?

배열 (Array) 개념 정리 보기
Q.

연결 리스트의 장단점을 설명해주세요

연결 리스트 (Linked List) 개념 정리 보기
Q.

LRU 캐시를 연결 리스트로 구현하는 방법은?

연결 리스트 (Linked List) 개념 정리 보기
Q.

단일 vs 이중 연결 리스트 차이는?

연결 리스트 (Linked List) 개념 정리 보기
Q.

연결 리스트에서 사이클을 검출하는 방법은?

연결 리스트 (Linked List) 개념 정리 보기

이런 점이 좋아요

코딩 테스트 기초 완성

알고리즘 이해도 향상

면접 대비 핵심 개념

지금 바로 시작하세요

무료로 자료구조 퀴즈를 풀고, AI 오답 분석으로 실력을 키우세요.