기본 자료구조 및 알고리즘
목차 18
1과목의 설계도를 코드로 옮기는 2과목의 첫 강. 자료구조 = 데이터를 효율적으로 담고 빠르게 꺼내기 위한 그릇과 규칙. 매 회차 데이터 입출력 영역에서 약 3문항 출제되며, 트리 운행법(전중후) 과 스택/큐 매칭(접줄) 이 단연 1순위.
핵심 암기: 대분류 선비 · 시간복잡도 Big-O 빅쓰리 · 연결 리스트 3종 단이원 · 스택/큐 접줄 · 트리 운행법 전중후
자료구조 기초
자료구조와 대분류 ·선비·분류·
[정의] 데이터를 효율적으로 저장하고 빠르게 꺼내 쓰기 위한 그릇의 모양과 규칙. 같은 데이터라도 어떤 그릇에 담느냐에 따라 꺼내는 속도가 크게 달라진다.
[분류] 데이터를 어떻게 연결하느냐에 따라 두 부류로 나뉜다.
| 분류 | 정의 | 대표 자료구조 |
|---|---|---|
| 선형(Linear) | 자료가 일렬로 배치 — 앞·뒤 관계만 존재 | 배열·연결 리스트·스택·큐·데크 |
| 비선형(Non-linear) | 자료가 여러 갈래로 분기 — 계층·연결 관계 | 트리·그래프·해시 테이블 |
🔑 암기 선비 — 선형 / 비선형, "자료구조 세계의 양반은 두 분" 💡 비유 선형 = 마트 계산대 줄(한 줄) / 비선형 = 가족 가계도·지하철 노선도(갈래) ⚠️ 함정 '트리는 선형이다' '큐는 비선형이다' = 100% 함정. 트리=비선형, 큐=선형. 분류 문제는 양방향 함정으로 단골. 🎯 빈출 분류·소거형이 거의 매회. 선비 한 단어가 양쪽 함정을 즉답 무력화.
시간복잡도 Big-O ·빅쓰리·복잡도·
[정의] 입력 크기 n이 커질 때 처리 시간이 늘어나는 정도. 자료구조마다 꺼내는 속도를 비교하는 단위. 시험은 빈출 3개만 묻는다.
| 표기 | 이름 | 의미 | 비유 |
|---|---|---|---|
| O(1) | 상수 시간 | 입력 크기 무관, 즉시 | 좌석 번호 알고 바로 앉기 |
| O(log n) | 로그 시간 | 매번 절반씩 줄어듦 | 책 중간 펼쳐 절반 버리기 |
| O(n) | 선형 시간 | 전체를 한 바퀴 훑기 | 명단 처음부터 끝까지 호명 |
[표] 오늘 다룰 선형 4종의 대표 속도.
| 동작 | 배열 | 연결 리스트 | 스택 | 큐 |
|---|---|---|---|---|
| 접근(Access) | O(1) | O(n) | O(1)(top) | O(1)(front) |
| 삽입(Insert) | O(n) | O(1)(위치 알면) | O(1) | O(1) |
| 삭제(Delete) | O(n) | O(1)(위치 알면) | O(1) | O(1) |
🔑 암기 Big-O 빅쓰리 — O(1) 즉답 · O(log n) 반토막 · O(n) 한 바퀴 💡 한 줄 배열은 접근이 빠르고(O(1)), 연결 리스트는 삽입·삭제가 빠르다(O(1)). 정반대 짝. 🌟 정렬·이분 탐색·해시의 복잡도 분석은 11강 범위. 오늘은 빅쓰리 3개만.
선형 자료구조
배열 (Array) ·선형·
[정의] 같은 자료형의 데이터를 연속된 메모리 공간에 일렬로 저장하고, 인덱스(번호) 로 즉시 접근하는 자료구조.
[표]
| 특징 | 의미 |
|---|---|
| 고정 크기 | 선언 시 크기 결정(정적 배열) |
| 연속 메모리 | 메모리 주소가 0번부터 차례로 붙음 |
| 인덱스 접근 | arr[3] 한 번에 O(1)로 꺼냄(임의 접근) |
| 삽입·삭제 비효율 | 중간 삽입 시 뒤 데이터를 모두 밀어야 함 → O(n) |
💡 비유 영화관 좌석 — C열 7번은 거리에 상관없이 바로 찾아감(O(1)). 단 중간 손님이 빠지면 뒷자리가 한 칸씩 당겨 앉아야 함(O(n)). 🎯 빈출 결정 키워드 = 연속 메모리 + 인덱스 O(1) 접근. 보기에 '임의 접근(Random Access)'이 보이면 거의 배열.
연결 리스트 (Linked List) ·선형·O(n) 함정·
[정의] 데이터(값)와 다음 노드의 주소(포인터) 를 한 묶음(노드)으로 만들어 체인처럼 연결한 자료구조. 마지막 노드는 NULL을 가리킨다.
┌──────┬──────┐ ┌──────┬──────┐ ┌──────┬──────┐
│ Data │ Next │ → │ Data │ Next │ → │ Data │ NULL │
└──────┴──────┘ └──────┴──────┘ └──────┴──────┘
[비교] 배열과 정반대 짝.
| 항목 | 배열 | 연결 리스트 |
|---|---|---|
| 메모리 배치 | 연속(붙어 있음) | 비연속(흩어짐) |
| 크기 | 고정 | 동적(실행 중 변동) |
| 접근 속도 | O(1)(인덱스) | O(n)(처음부터 따라감) |
| 삽입·삭제 | O(n)(밀어내기) | O(1)(포인터만 변경) |
💡 비유 배열 = 번호표 사물함(5번 즉시) / 연결 리스트 = 다음 위치가 적힌 보물찾기 쪽지(1→2→3→4 거쳐야 5번). ⚠️ 함정 '연결 리스트는 인덱스로 O(1) 임의 접근 가능' = 100% 함정. 연결 리스트는 O(n) 순차 접근. O(1)은 배열. 🎯 빈출 결정 키워드 = 노드 + 포인터 + 동적 메모리 할당. 이 단어가 보이면 연결 리스트.
연결 리스트 3종 ·단이원·선형·
[분류] 포인터를 어떻게 두느냐에 따라 3종으로 나뉜다.
| 종류 | 구조 | 특징 |
|---|---|---|
| 단순(Single) | 앞→뒤 포인터 1개 | 한 방향 이동, 가볍고 단순 |
| 이중(Double) | 앞↔뒤 포인터 2개 | 양방향 이동, 메모리 약간 더 사용 |
| 원형(Circular) | 마지막 노드가 처음과 연결 | 끝없이 순환 가능 |
단순: [A] → [B] → [C] → NULL
이중: NULL ← [A] ↔ [B] ↔ [C] → NULL
원형: [A] → [B] → [C] → (다시 A)
🔑 암기 단이원 — 단순 · 이중 · 원형, "단번에 이중 원샷" 💡 비유 단순 = 일방통행 / 이중 = 왕복 도로 / 원형 = 트랙(돌고 돌아 시작점) 🎯 빈출 종류 매칭 단골. '이중 = 양방향', '원형 = 끝→처음' 두 키워드를 함께.
스택 (Stack · LIFO) ·접줄·1순위·
[정의] 가장 나중에 들어간 데이터가 가장 먼저 나오는 후입선출(LIFO, Last In First Out) 구조. 입출구가 한 곳(top).
│ │ ← top (입출구 1개)
├─────┤
│ C │ ← 마지막 입력, 첫 출력
├─────┤
│ B │
├─────┤
│ A │ ← 첫 입력, 마지막 출력
└─────┘
PUSH 순서: A → B → C / POP 순서: C → B → A (역순)
[표] 5연산.
| 연산 | 동작 |
|---|---|
| push(x) | top 위에 x 쌓기 |
| pop() | top 제거 후 그 값 반환 |
| top() / peek() | 맨 위 값 확인만(꺼내지 않음) |
| isEmpty() | 비었는지 검사 |
| isFull() | 꽉 찼는지 검사(배열 기반만 의미) |
⚠️ 함정 빈 스택에 pop = 언더플로(Underflow), 꽉 찬 스택에 push = 오버플로(Overflow). 이름 매칭 단골. 💡 실무 함수 호출·재귀(Recursion)·괄호 검사·실행 취소(Ctrl+Z)·후위 표기 변환·브라우저 뒤로가기가 모두 스택. 재귀 과다 호출 오류 이름이 곧 Stack Overflow. 🎯 빈출 보기에 '함수 호출·재귀·괄호 검사·Undo' 또는 '입출력 한 곳'이 보이면 스택. push·pop이 가장 잦다.
큐 (Queue · FIFO) ·접줄·1순위·
[정의] 가장 먼저 들어간 데이터가 가장 먼저 나오는 선입선출(FIFO, First In First Out) 구조. 입구(rear)와 출구(front)가 분리된다.
[출구] front → A B C D ← rear [입구]
dequeue(먼저 나감) enqueue(나중 들어옴)
[표] 4연산. 스택의 push·pop과 1:1 대응(enqueue=push, dequeue=pop).
| 연산 | 동작 |
|---|---|
| enqueue(x) | rear에 x 추가 |
| dequeue() | front 제거 후 그 값 반환 |
| front() | 맨 앞 값 확인만 |
| rear() | 맨 뒤 값 확인만 |
💡 비유 마트 계산대 줄 — 먼저 줄 선 사람이 먼저 나감(새치기 없음). 💡 실무 메시지 지향 미들웨어(MOM·메시지 큐), 작업 처리 대기열, 프린터 작업 큐, 예매 대기열이 모두 큐. 이름에 'Queue'가 들어간 미들웨어(메시지 큐 류)는 99% 큐 자료구조. 🎯 빈출 보기에 '선입선출·FIFO·프린터 큐·메시지 큐·작업 처리' 또는 '입출력 두 곳'이 보이면 큐.
원형 큐와 데크 ·변형·🌟·
[정의] 일반 선형 큐의 한계(앞이 비어도 rear가 끝에 닿으면 더 못 넣는 공간 낭비)를 보완한 변형 큐 2종.
| 변형 | 정의 | 활용 |
|---|---|---|
| 원형 큐(Circular Queue) | 배열의 끝과 처음을 논리적으로 연결해 빈 공간 재사용 | 라운드 로빈 스케줄링·스트리밍 버퍼 |
| 데크(Deque, Double-Ended Queue) | 양쪽 끝(front·rear) 모두에서 삽입·삭제 가능 | 슬라이딩 윈도우·방문 이력 관리 |
🌟 자주 출제되진 않음. '원형 큐 = 끝↔처음 연결로 공간 재활용', '데크 = 양쪽 입출력' 한 줄씩만. 💡 보충 우선순위 큐(Priority Queue) 는 먼저 들어온 순이 아니라 우선순위 높은 것이 먼저 나가는 변형(힙 기반). 정의만 — 11강에서 본격.
스택 vs 큐 즉답 매칭 ·접줄·1순위·
[비교] 10강 핵심 1순위. 이 한 표가 기출 다지기의 정답 키.
| 항목 | 스택(Stack) | 큐(Queue) |
|---|---|---|
| 처리 방식 | LIFO(후입선출) | FIFO(선입선출) |
| 입출구 | 한 곳(top) | 두 곳(front·rear) |
| 핵심 연산 | push / pop | enqueue / dequeue |
| 출력 순서 | 입력의 역순 | 입력 그대로 |
| 비유 | 접시 쌓기 | 마트 줄 서기 |
🔑 암기 접줄 — 스택=접시 쌓기(LIFO·입출구 1개) / 큐=줄 서기(FIFO·입출구 2개) 🎯 빈출 매 회차 출제 1순위. 한 회차에 2문항까지 등장. '쌓아서 위에서 꺼냄' → 스택, '먼저 온 사람이 먼저' → 큐.
비선형 자료구조 — 트리
트리 개념과 용어 ·잎=단말·차수 함정·
[정의] 여러 노드가 계층(부모-자식) 관계로 연결된 비선형 자료구조. 사이클(순환)이 없는 그래프의 한 종류.
[A] ← 루트(Root)
/ \
[B] [C] ← A의 자식, 서로 형제
/ \ \
[D] [E] [F] ← 잎(Leaf, 단말 노드)
[표] 용어 매칭이 시험 단골. 7개만 정확히.
| 용어 | 정의 | 예시 |
|---|---|---|
| 루트(Root) | 최상단 노드, 부모 없음 | A |
| 부모(Parent) | 한 단계 위 노드 | B의 부모 = A |
| 자식(Child) | 한 단계 아래 노드 | A의 자식 = B, C |
| 잎(Leaf, 단말) | 자식이 없는 노드 | D, E, F |
| 차수(Degree) | 한 노드가 가진 자식의 수 | A=2, C=1 |
| 레벨(Level) | 루트에서의 깊이(루트=1) | A=1, B·C=2 |
| 높이(Height) | 가장 깊은 잎까지의 거리 | 위 트리 = 3 |
⚠️ 함정 ① 노드 차수 vs 트리 차수 — 노드 차수 = 그 노드의 자식 수, 트리 차수 = 모든 노드 차수 중 최댓값. 위 트리는 트리 차수 = 2(A·B가 최대). '자식이 셋이라 차수=3'은 함정. ⚠️ 함정 ② 잎 = 단말(Terminal) = 외부(External) 노드 — 같은 노드의 동의어. 다른 이름으로 등장해도 같은 말. 🔑 암기 트리 차수 = 노드 차수 최댓값 / 잎 = 단말 = 터미널 🎯 빈출 'A는 루트? B의 차수는? 단말 노드는?' 형태로 거의 매회. 결정 키워드 = 비선형 + 계층 + 사이클 없음.
이진 트리 3종 ·트리·
[정의] 각 노드가 최대 2개의 자식(왼쪽·오른쪽)만 갖는 트리(모든 노드 차수 ≤ 2). 다시 3종으로 나뉜다.
| 종류 | 정의 |
|---|---|
| 정 이진 트리(Full) | 모든 노드가 자식 0개 또는 2개(자식 1개인 노드 없음) |
| 완전 이진 트리(Complete) | 마지막 레벨 제외 모두 채워지고, 마지막 레벨은 왼쪽부터 채움(힙의 기반) |
| 편향 이진 트리(Skewed) | 한쪽 방향으로만 노드가 늘어남(사실상 연결 리스트) |
정(Full): 자식 0 또는 2 완전(Complete): 왼쪽부터 편향(Skewed): 한쪽만
[A] [A] [A]
/ \ / \ \
[B] [C] [B] [C] [B]
/ \ / \ / \ / \
[D][E][F][G] [D][E][F] [C]
🔑 암기 정 = 자식 0 또는 2 / 완전 = 왼쪽부터 빈틈없이 / 편향 = 한쪽으로만 💡 보충 노드 수 N인 완전 이진 트리의 높이는 약 log₂N — 'log 형태'라는 감각만. 계산 문제까진 거의 안 나옴. 🎯 빈출 분류 매칭. '자식 0 또는 2(정)', '왼쪽부터(완전)', '한쪽만(편향)' 세 키워드면 즉답.
트리 운행법(순회) ·전중후·1순위·
[정의] 트리의 모든 노드를 빠짐없이 한 번씩 방문하는 순서 규칙. 루트(Root)를 언제 방문하느냐로 이름이 갈린다. 시험 출제율 1위 영역.
| 운행법 | 영문 | 방문 순서 | Root 위치 |
|---|---|---|---|
| 전위 순회 | Pre-order | Root → Left → Right | 먼저 |
| 중위 순회 | In-order | Left → Root → Right | 가운데 |
| 후위 순회 | Post-order | Left → Right → Root | 나중 |
[추적] 아래 트리를 세 운행법으로 읽으면 — Root(A) 위치만 다를 뿐.
[A]
/ \
[B] [C]
/ \ / \
[D] [E][F] [G]
| 운행법 | 결과 | A 위치 |
|---|---|---|
| 전위(Pre) | A B D E C F G | 맨 앞 |
| 중위(In) | D B E A F C G | 가운데 |
| 후위(Post) | D E B F G C A | 맨 뒤 |
🔑 암기 전중후 — 전위(Root 먼저) · 중위(Root 가운데) · 후위(Root 나중). 영문 Pre/In/Post = 전/중/후. 🔑 즉답 Pre는 첫 글자가 루트, Post는 끝 글자가 루트, In은 루트가 가운데. 보기 4개 중 3개를 즉시 선소거. 🎯 빈출 '작은 트리 그림 → 운행 결과' 형태가 거의 매회. 보기에 보통 Pre·In·Post·레벨(BFS) 네 결과를 다 깔아 함정.
수식 트리와 후위 표기 ·응용·
[정의] 운행법을 수식(Expression) 표기에 그대로 적용. 같은 수식 트리도 운행법에 따라 표기가 달라진다.
수식 (A + B) * C 의 트리:
[*]
/ \
[+] [C]
/ \
[A] [B]
| 운행법 | 결과 | 표기법 |
|---|---|---|
| 전위(Pre) | * + A B C |
전위 표기(Polish Notation) |
| 중위(In) | A + B * C |
중위 표기(평소 쓰는 수식) |
| 후위(Post) | A B + C * |
후위 표기(Reverse Polish, RPN) |
💡 핵심 사람은 중위(A+B)가 익숙하지만 컴퓨터는 후위(AB+) 를 선호 — 후위 표기는 스택을 쓰면 괄호 없이 계산 가능. 컴파일러가 수식 파싱 시 내부적으로 후위로 변환. 앞서 본 스택의 '후위 표기 변환' 사례가 여기서 만난다. 🎯 빈출 '이 수식 트리의 후위 순회 결과는?' 또는 '후위 표기로 변환하면?' 형태. 운행법 추적 그대로 적용.
기출 다지기
[기출 1 출제] 다음 중 스택(Stack)의 특징으로 옳은 것은? (긍정 판단형)
- ① 자료의 입력과 출력이 같은 쪽에서 이루어진다
- ② 가장 먼저 입력된 자료가 가장 먼저 출력된다
- ③ 비선형 자료구조의 일종이다
- ④ 자료의 출력은 항상 자료의 가운데에서 이루어진다
정답 및 해설 보기
정답 ①
스택은 입출구가 한 곳(top)이라 push·pop이 같은 쪽에서 일어난다.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① 같은 쪽 입출력 | 정답 | top 한 곳에서 push·pop |
| ② 먼저 입력 → 먼저 출력 | 오답 | 그건 큐(FIFO) — 스택은 LIFO |
| ③ 비선형 | 오답 | 스택은 선형(선비 분류) |
| ④ 가운데 출력 | 오답 | 항상 top(맨 위)에서만 출력 |
🔑 접줄 — '입출력 한 곳' 보이면 스택, '두 곳'이면 큐. ②큐 함정·③선비 함정·④가운데 함정 세 개가 한 번에 깔린 빈출 패턴.
[기출 2 출제] 다음 ( )에 들어갈 가장 적절한 자료구조는? (빈칸형)
운영체제에서 프린터에 출력 요청이 들어오는 순서대로 인쇄 작업을 처리하기 위해 사용하는 자료구조는 ( )이며, First In First Out(FIFO) 방식으로 동작한다.
- ① 스택(Stack)
- ② 큐(Queue)
- ③ 트리(Tree)
- ④ 그래프(Graph)
정답 및 해설 보기
정답 ②
문장 안의 'First In First Out(FIFO)'이 결정적 단서.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① 스택 | 오답 | LIFO — 나중 작업이 먼저 인쇄돼버림 |
| ② 큐 | 정답 | FIFO — 들어온 순서대로 인쇄 |
| ③ 트리 | 오답 | 비선형 — 순서 처리에 부적합 |
| ④ 그래프 | 오답 | 비선형 — 순서 처리에 부적합 |
🔑 'FIFO·선입선출·프린터 큐·메시지 큐' → 큐 즉답. 이름에 'Queue'가 들어가면 99% 큐.
[기출 3 출제] 다음 트리를 전위 순회(Pre-order)한 결과로 옳은 것은? (시각자료형)
[A]
/ \
[B] [C]
/ \ \
[D] [E] [F]
- ① A B D E C F
- ② D B E A C F
- ③ D E B F C A
- ④ A B C D E F
정답 및 해설 보기
정답 ①
전위 = Root → Left → Right(Root 먼저). A → B → D → E → C → F.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① A B D E C F | 정답 | Pre-order 정확 |
| ② D B E A C F | 오답 | 중위(In) — A가 가운데 |
| ③ D E B F C A | 오답 | 후위(Post) — A가 마지막 |
| ④ A B C D E F | 오답 | 레벨 순회(BFS) — 시험 범위 외 |
🔑 전중후 — Pre는 첫 글자가 루트(A). 첫 글자가 A가 아닌 보기는 선소거.
[기출 4 출제] 다음 트리를 후위 순회(Post-order)한 결과로 옳은 것은? (시각자료형 · 같은 트리)
[A]
/ \
[B] [C]
/ \ \
[D] [E] [F]
- ① A B D E C F
- ② D B E A C F
- ③ D E B F C A
- ④ A B C D E F
정답 및 해설 보기
정답 ③
후위 = Left → Right → Root(Root 나중). B부분(D E B) → C부분(F C) → A.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① A B D E C F | 오답 | 전위(Pre) — A가 첫 글자 |
| ② D B E A C F | 오답 | 중위(In) — A가 가운데 |
| ③ D E B F C A | 정답 | 후위(Post) — Root(A)가 마지막 |
| ④ A B C D E F | 오답 | 레벨 순회 — 시험 범위 외 |
🔑 Post는 끝 글자가 루트(A). 보기 중 마지막 글자가 A인 것은 ③뿐. 보기의 첫 글자·끝 글자만 훑으면 30초 안에 풀린다.
[기출 5 출제] 다음 트리에 대한 설명 중 잘못 짝지어진 것은? (짝짓기 오류형)
[A]
/ \
[B] [C]
/ \ \
[D] [E] [F]
- ① 루트 노드: A
- ② 단말 노드(잎): D, E, F
- ③ 트리의 차수(Degree): 3
- ④ 트리의 높이(Height): 3
정답 및 해설 보기
정답 ③
각 노드 차수 — A=2, B=2, C=1, D·E·F=0. 최댓값 2이므로 트리 차수 = 2.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① 루트: A | 정확 | 최상위 노드 |
| ② 단말: D, E, F | 정확 | 자식 없는 노드 3개 |
| ③ 트리 차수: 3 | 오류 | 트리 차수는 2(노드 차수 최댓값) |
| ④ 높이: 3 | 정확 | 루트(레벨1) → 잎(레벨3) |
🔑 트리 차수 = 자식 총합이 아니라 노드 차수의 최댓값. '자식이 셋이라 차수=3'은 단골 함정.
[기출 6 출제] 자료구조에 대한 설명으로 옳지 않은 것은? (부정형)
- ① 배열은 인덱스를 이용해 O(1) 시간에 임의 접근이 가능하다
- ② 연결 리스트는 노드 간 포인터로 연결되어 동적 메모리 할당이 가능하다
- ③ 연결 리스트는 인덱스로 임의 접근 시 O(1) 시간에 접근 가능하다
- ④ 이중 연결 리스트는 양방향(앞·뒤) 이동이 가능하다
정답 및 해설 보기
정답 ③
연결 리스트는 인덱스 접근 시 첫 노드부터 따라가야 해 O(n). O(1)은 배열의 특징.
| 선지 | 판정 | 근거 |
|---|---|---|
| ① 배열 O(1) 임의 접근 | 정확 | 연속 메모리 + 인덱스 |
| ② 연결 리스트 동적 메모리 | 정확 | 실행 중 노드 추가·삭제 |
| ③ 연결 리스트 O(1) 임의 접근 | 오류 | 연결 리스트는 O(n) 순차 접근 |
| ④ 이중 연결 리스트 양방향 | 정확 | 단이원 중 이중 = 포인터 2개 |
🔑 배열 = 접근(O(1)) 강자, 연결 리스트 = 삽입·삭제(O(1)) 강자. 둘을 거꾸로 표현한 보기가 정답(틀린 설명).
[기출 7 출제] 다음 자료구조 중 분류가 다른 하나는? (소거형)
- ① 스택(Stack)
- ② 큐(Queue)
- ③ 연결 리스트(Linked List)
- ④ 트리(Tree)
정답 및 해설 보기
정답 ④
스택·큐·연결 리스트는 선형, 트리만 비선형.
| 선지 | 분류 | 판정 |
|---|---|---|
| ① 스택 | 선형 | 오답 |
| ② 큐 | 선형 | 오답 |
| ③ 연결 리스트 | 선형 | 오답 |
| ④ 트리 | 비선형 | 정답 |
🔑 선비 — 선형 4총사(배열·연결 리스트·스택·큐), 비선형 대표(트리·그래프·해시). 보기에 트리·그래프·해시가 끼면 그게 정답일 확률이 높다.
한 장 요약
| 영역 | 핵심 | 암기팁 |
|---|---|---|
| 대분류 | 선형(배열·연결 리스트·스택·큐) / 비선형(트리·그래프) | 선비 |
| 시간복잡도 | O(1) 즉답 · O(log n) 반토막 · O(n) 한 바퀴 | Big-O 빅쓰리 |
| 배열 vs 연결 리스트 | 접근 O(1) 강자 vs 삽입·삭제 O(1) 강자 | (정반대 짝) |
| 연결 리스트 3종 | 단순·이중·원형 | 단이원 |
| 선형 1순위 | 핵심 | 암기팁 |
|---|---|---|
| 스택 | LIFO · top 1개 · push/pop · 함수 호출·재귀·Undo | 접시 |
| 큐 | FIFO · front·rear 2개 · enqueue/dequeue · 프린터·메시지 큐 | 줄 |
| 트리 | 핵심 | 암기팁 |
|---|---|---|
| 용어 | 루트·부모·자식·잎·차수·레벨·높이 / 트리 차수 = 노드 차수 최댓값 | (잎=단말=터미널) |
| 이진 트리 3종 | 정(0 또는 2)·완전(왼쪽부터)·편향(한쪽만) | (정·완전·편향) |
| 운행법 | 전위(Root 먼저)·중위(가운데)·후위(나중) | 전중후 |
| 운행 즉답 | Pre는 첫 글자 루트, Post는 끝 글자 루트 | (선소거 카드) |
🎯 합격 한 끗: 가장 잦은 두 유형 = 트리 운행법(전중후) + 스택/큐 매칭(접줄). 다섯 단어(선비·Big-O 빅쓰리·단이원·접줄·전중후)만 외워두면 10강은 거뜬. 단골 함정 3종 = '트리=선형'(→비선형), '연결 리스트 O(1) 임의 접근'(→O(n)), '트리 차수=자식 총합'(→노드 차수 최댓값).
