문서 읽는 데 36분 · 11강 · 2과목 · 소프트웨어 개발

고급 자료구조·정렬·탐색

목차 19
전체 59강 중 11강 · 2과목 · 소프트웨어 개발

10강의 그릇(자료구조) 위에서 데이터를 줄 세우고(정렬)·찾아내는(탐색) 도구를 다룬다. 매 회차 선·삽·버 1회전 추적이분 탐색 정렬 전제가 확실한 점수밭. 10강의 큐·스택·완전 이진 트리·Big-O 빅쓰리가 여기서 BFS·DFS·힙·탐색 복잡도로 그대로 살아난다.

핵심 암기: 정렬 8종 선삽버퀵병힙셸기 · 1회전 추적 선삽버 · 탐색 3종 순이해 · 해시 함수 5종 제폴기숫제 · 충돌 해결 개체 · 그래프 탐색 BFS=큐·DFS=스택


고급 자료구조 — 그래프와 힙

그래프(Graph) ·자료구조·

[정의] 정점(Vertex) 과 그 사이를 잇는 간선(Edge) 으로 이루어진 비선형 자료구조. 트리도 그래프의 한 종류로, 트리는 사이클이 없고 부모-자식이 명확한 반면 그래프는 자유롭게 연결되고 사이클도 허용된다.

[분류] 간선에 방향이 있느냐로 갈린다.

분류 정의 비유
무방향 그래프 간선에 방향 없음 — 양방향 통행 친구 관계(서로 친구)
방향 그래프 간선에 방향 있음 — 한 방향만 팔로우(A→B 일방향)
가중치 그래프 간선마다 비용·거리 값 부여 지도 길찾기(교차로=정점, 도로=간선)

⚠️ 함정 '트리는 그래프가 아니다' 보기는 함정. 트리 = 사이클 없는 연결 그래프로, 그래프의 특수한 한 종류다. 🎯 빈출 정의 키워드(정점·간선)와 방향/무방향 구분 매칭까지가 출제 범위. 깊이 들어가지 않는다.

그래프 표현 — 인접 행렬 vs 인접 리스트 ·표현·

[정의] 그래프를 메모리에 저장하는 방식은 두 가지뿐. 어느 게 더 좋은지는 정답이 없는 trade-off라, '~에 적합한 표현법은?' 형태로 나온다.

구분 인접 행렬(Adjacency Matrix) 인접 리스트(Adjacency List)
저장 방식 2차원 배열(정점 × 정점) 정점마다 연결된 정점 리스트
공간 복잡도 O(V²) — 정점 수 제곱 O(V + E) — 정점 + 간선 수
두 정점 연결 확인 O(1) 즉답 O(V) 순회
적합한 경우 간선 많은 밀집 그래프 간선 적은 희소 그래프

🔑 즉답 공간 복잡도로 판별O(V²) 보이면 인접 행렬, O(V+E) 보이면 인접 리스트. 💡 비유 인접 행렬 = 30×30 출석부 표(짝꿍 한눈에, 빈 칸 낭비) / 인접 리스트 = 학생별 친구 이름만 적은 노트(절약, 일일이 펴봐야 함). 🎯 빈출 매 회차는 아니지만 공간 복잡도 매칭으로 간헐 등장.

그래프 탐색 — BFS·DFS ·탐색·1순위·

[정의] 그래프 위 모든 정점을 훑는 두 방법. 10강의 큐·스택이 그대로 재료가 된다.

구분 BFS(너비 우선 탐색) DFS(깊이 우선 탐색)
풀네임 Breadth-First Search Depth-First Search
진행 방향 가로로 — 가까운 곳부터 한 겹씩 세로로 — 한 길 끝까지 깊이
사용 자료구조 큐(Queue, FIFO) 스택(Stack, LIFO) 또는 재귀
대표 활용 최단 경로·친구 추천 미로 탐색·백트래킹·순열/조합

🔑 암기 BFS=큐, DFS=스택 — 가까운 곳부터 한 명씩 → 먼저 발견한 정점 먼저(FIFO·큐) / 한 길 끝까지 파고들다 되돌아감 → 가장 최근 정점부터(LIFO·스택). ⚠️ 함정 'BFS=스택', 'DFS=큐' 형태 보기는 모두 거꾸로. BFS=큐, DFS=스택이 정답. 🎯 빈출 변형 출제 거의 없는 매 회차 단골. 거의 100% 점수밭. 📝 기출 BFS 구현 자료구조를 직접 물음.

힙(Heap)과 우선순위 큐 ·자료구조·

[정의] 부모-자식 간 크기 순서 규칙을 만족하는 완전 이진 트리. 10강에서 본 완전 이진 트리(왼쪽부터 빈틈없이 채움)가 힙의 토대라, 배열 한 줄로도 표현된다.

분류 규칙 루트 위치
최대 힙(Max Heap) 부모 ≥ 자식(위로 갈수록 큼) 최댓값
최소 힙(Min Heap) 부모 ≤ 자식(위로 갈수록 작음) 최솟값

[흐름] 힙의 진짜 쓸모는 우선순위 큐(Priority Queue) 구현. 보통 큐는 FIFO(먼저 온 순)지만, 우선순위 큐는 순서가 아니라 급한 정도가 기준 — 늦게 와도 더 급한 일이 먼저 나간다.

💡 비유 보통 큐가 줄서기라면 우선순위 큐는 응급실 트리아지 — 나중에 와도 심정지 환자가 감기 환자보다 먼저 처치받는다. OS 프로세스 스케줄링(우선순위 높은 프로세스 먼저 CPU 할당)도 같은 구조. 🔑 즉답 힙 = 완전 이진 트리 + 최대 힙은 루트가 최댓값 두 키워드면 끝. 🎯 빈출 '힙은 어떤 트리?'(완전 이진 트리)·'최대 힙 루트는?'(최댓값) 매칭 정도.


정렬 알고리즘

정렬 8종 분류와 시간복잡도 ·종합·

[정의] 정렬 = 데이터를 오름차순/내림차순으로 줄 세우는 알고리즘. 정처기 출제는 8종. 다 외우지 말고 분류와 시간복잡도로 묶는다.

정렬 평균 최악 안정성 분류 / 핵심 키워드
선택(Selection) O(n²) O(n²) 단순 — 최솟값 선택
삽입(Insertion) O(n²) O(n²) 단순 — 카드 끼우기
버블(Bubble) O(n²) O(n²) 단순 — 옆 비교 교환
퀵(Quick) O(n log n) O(n²) 분할정복 — 피벗 분할
병합(Merge) O(n log n) O(n log n) 분할정복 — 쪼갠 뒤 합치기
힙(Heap) O(n log n) O(n log n) 자료구조 활용 — 힙
셸(Shell) O(n^1.5) O(n²) 간격(gap) 활용
기수(Radix) O(dn) O(dn) 비교 안 함 — 자릿수 분류

🔑 암기 선삽버퀵병힙셸기 — 단순 3(선·삽·버) + 분할정복 2(퀵·병합) + 힙 + 셸 + 기수. 🔑 분류 한 줄 단순 3 = O(n²) · 고급 3(퀵·병합·힙) = O(n log n) · 셸은 중간(n^1.5) · 기수는 별종(dn). ⚠️ 함정 퀵의 최악은 O(n²)(피벗을 정렬된 끝값으로 잡았을 때). '퀵은 항상 O(n log n)' 보기는 함정 — 병합·힙만 최악도 O(n log n) 보장. 🎯 빈출 '평균 O(n²)가 아닌 정렬은?'·'O(n log n)인 정렬은?' 매 회차 한 문제. 안정성은 가끔 — 삽버병기(삽입·버블·병합·기수)=안정, 선셸퀵힙(선택·셸·퀵·힙)=불안정.

선택 정렬(Selection Sort) ·1회전·1순위·

[정의] 전체에서 최솟값을 찾아 맨 앞과 자리 바꾸기. 매 회전마다 남은 영역에서 최솟값을 선택해 앞으로 끌어온다. 1회전이 끝나면 맨 앞 한 자리가 확정.

[추적] 오름차순 1회전 — 초기 [37, 14, 17, 40, 35]:

텍스트
1단계: 전체에서 최솟값 = 14 (2번째 위치)
2단계: 1번 자리(37)  14 교환
결과:  [14, 37, 17, 40, 35]
        └ 14가 맨 앞에 확정

💡 비유 운동회 줄세우기 — 전체를 둘러봐 가장 키 작은 학생을 맨 앞으로 데려온다. 🔑 표식 1회전 후 맨 앞 한 자리에 최솟값 확정. ⚠️ 함정 선택·삽입은 1회전 결과가 우연히 같을 수 있다. 차이는 '확정된 자리 개수' — 선택=1번 자리 1개.

삽입 정렬(Insertion Sort) ·1회전·1순위·

[정의] 2번째 원소부터 꺼내, 앞쪽 정렬된 부분의 알맞은 자리에 끼워 넣기. 1번 자리는 정렬됐다 가정. 회전이 늘수록 앞쪽 정렬 영역이 한 자리씩 늘어난다.

[추적] 오름차순 1회전 — 초기 [37, 14, 17, 40, 35]:

텍스트
1단계: 2번 원소 14 를 꺼낸다
2단계: 앞쪽 [37] 과 비교  14 < 37  37 앞으로 끼움
결과:  [14, 37, 17, 40, 35]
        └─┴ 14·37 앞 두 자리가 정렬 영역

💡 비유 카드 게임 — 새로 받은 카드를 손에 든 정렬된 카드 사이 알맞은 자리에 쏙 끼운다. 🔑 표식 1회전 후 앞 두 자리 정렬. 회전 수 = 정렬된 영역 길이 − 1. ⚠️ 함정 위 결과 [14, 37, 17, 40, 35]는 선택 정렬과 똑같다. 단서는 어디까지 정렬됐는가 — 선택=1개, 삽입=2개.

버블 정렬(Bubble Sort) ·1회전·1순위·

[정의] 옆 사람과 비교해 큰 사람이 뒤로 한 칸씩 밀려나기. 1번-2번, 2번-3번… 끝까지 옆 자리와 비교. 1회전이 끝나면 가장 큰 값이 맨 뒤로 떠밀려 간다.

[추적] 오름차순 1회전 — 초기 [37, 14, 17, 40, 35]:

텍스트
1·2번: 37>14 교환  [14, 37, 17, 40, 35]
2·3번: 37>17 교환  [14, 17, 37, 40, 35]
3·4번: 37<40 유지  [14, 17, 37, 40, 35]
4·5번: 40>35 교환  [14, 17, 37, 35, 40]
결과:              [14, 17, 37, 35, 40]
                                └ 최댓값 40이 맨 뒤에 확정

💡 비유 욕조 거품 — 큰 거품이 먼저 위로 떠오른다. 한 회전마다 가장 큰 값 하나가 뒤로. 🔑 표식 1회전 후 맨 뒤 한 자리에 최댓값 확정. ⚠️ 함정 '선택은 맨 뒤 최댓값'·'버블은 맨 앞 최솟값' 보기는 거꾸로. 선택=앞·최솟값, 버블=뒤·최댓값.

선·삽·버 1회전 비교 ·시험1순위·

[정의] 매 회차 한 문제씩 나오는 시험 1순위. 한 표로 압축한다.

[표] 초기 [37, 14, 17, 40, 35] 오름차순 1회전:

알고리즘 1회전 결과 확정
선택 [14, 37, 17, 40, 35] 맨 앞 최솟값(14)
삽입 [14, 37, 17, 40, 35] 두 자리 정렬
버블 [14, 17, 37, 35, 40] 맨 뒤 최댓값(40)

🔑 즉답 맨 앞 한 자리 정렬 → 선택 / 앞 두세 자리 정렬 → 삽입 / 맨 뒤 최댓값 → 버블. ⚠️ 함정 매 회차 단골 2종 — ① 선택·삽입 우연 일치(확정 자리 개수로 구분: 선택 1개·삽입 2개) ② 선택과 버블 방향 뒤집기(선택=앞·최솟값, 버블=뒤·최댓값). 보기 읽을 때 방향과 자리 개수 두 단서를 다시 확인. 🎯 빈출 '1회전 수행 후 데이터 상태'를 묻는 추적형이 단연 1순위. 종이에 한 칸씩 적어가며 푸는 게 정확.

고급 정렬 — 셸·퀵·병합·힙·기수 ·고급·

[정의] 여기서부터는 이름과 핵심 키워드만. 1회전 추적은 거의 안 나온다.

정렬 핵심 동작 시간복잡도 메모
셸(Shell) 삽입 정렬 개선 — 간격(gap)을 크게 뒀다 점점 줄여 마지막에 간격 1 평균 O(n^1.5)
퀵(Quick) 피벗 기준 작은 건 왼쪽·큰 건 오른쪽 분리 후 재귀 평균 O(n log n)·최악 O(n²)
병합(Merge) 반으로 계속 쪼개 길이 1까지 → 두 줄 합치며 정렬 O(n log n) 보장·안정·추가 메모리
힙(Heap) 최대 힙 구성 → 루트(최댓값) 꺼내 뒤로 → 재구성 반복 O(n log n) 보장·in-place
기수(Radix) 자릿수로 0~9 버킷 분류만 — 두 값을 비교하지 않음 O(dn)

💡 비유 퀵 = 반장(피벗) 기준 좌우 분리 후 각 그룹서 또 반장 선출(분할정복) / 기수 = 우편번호 한 자리씩 버킷에 분류. 💡 실무 자바 Arrays.sort(int[]) 원시 타입 정렬 = 듀얼 피벗 퀵 정렬. (객체 정렬·파이썬 sorted()는 Timsort라 퀵 예시로는 부적합.) 🔑 즉답 '비교를 하지 않는 정렬'·'자릿수 기반' → 기수 / '삽입 정렬 개선판' → / '피벗' → / '분할 후 합치며 안정 정렬' → 병합. ⚠️ 함정 '퀵은 항상 O(n log n)' → 최악 O(n²)(피벗 의존). 병합·힙은 최악도 O(n log n) 보장.


탐색과 해싱

탐색 3종 — 순이해 ·탐색·

[정의] 탐색(Search) = 데이터에서 원하는 값을 찾아내는 알고리즘. 정처기 출제는 3종.

알고리즘 동작 시간복잡도 전제 조건
순차 탐색 처음부터 끝까지 한 명씩 확인(=선형 탐색) O(n) 없음
이분 탐색 중간을 보고 절반씩 버리기 O(log n) 정렬된 상태 필수(함정 1순위)
해싱 해시 함수로 자리 직접 계산 O(1) 평균 해시 테이블 구축

🔑 암기 순이해차·분·싱. 10강 Big-O 빅쓰리가 그대로 매칭 — 순차는 한 바퀴(O(n))·이분은 반토막(O(log n))·해싱은 즉답(O(1)). 🎯 빈출 '탐색이 아닌 것은?' 소거형 + 시간복잡도 매칭. 순차 탐색은 'O(n)·정렬 필요 없음' 두 키워드면 끝.

이분 탐색 — 정렬 전제와 비교 횟수 ·함정1순위·

[정의] 중간 값을 본다 → 찾는 값보다 크면 앞쪽 절반, 작으면 뒤쪽 절반으로 범위를 줄인다 → 반복. 전제 조건: 데이터가 정렬돼 있어야 함(시험 함정 1순위).

[추적] 정렬 배열 1, 3, 5, 7, 9, 11, 13, 15, 17에서 15 찾기:

텍스트
1회: 중간 9   9 < 15   오른쪽 [11,13,15,17]
2회: 중간 13  13 < 15  오른쪽 [15,17]
3회: 중간 15  15 == 15  찾음
총 비교: 3회  (log₂9 ≈ 3.17  올림 3)

[표] 데이터 크기별 최대 비교 횟수 = log₂N(올림):

데이터 개수 최대 비교
8개 3회 (log₂8 = 3)
16개 4회 (log₂16 = 4)
100개 약 7회 (log₂100 ≈ 6.64)
1000개 약 10회 (log₂1000 ≈ 9.97)

💡 비유 두꺼운 사전을 딱 중간부터 펼쳐, 찾는 단어가 앞 글자면 앞 절반·뒷 글자면 뒤 절반을 또 가운데 펼친다. 한 번에 후보가 절반씩 준다. 💡 실무 DB B-Tree 인덱스가 본질적으로 이분 탐색의 확장(다중 분할). 3과목 DB 인덱스에서 다시 만난다. 🔑 즉답 O(log n) + 정렬 전제 + 중간 값 비교 + 비교 횟수 ≈ log₂N(올림). ⚠️ 함정 '이분 탐색은 정렬 안 된 데이터에서도 빠르다'·'순서와 무관하게 O(log n)' 보기는 모두 함정. 정렬돼 있을 때만 동작. '이분 탐색' 단어가 보이면 '정렬'이 같이 등장하는지부터 확인.

해싱과 해시 함수 5종 — 제폴기숫제 ·해싱·

[정의] 해시 함수(Hash Function) 로 키를 입력해 저장 위치(주소)를 계산해 즉시 찾는 방식. 평균 O(1) — 데이터가 100만 개든 1억 개든 같은 시간. 자료구조 중 가장 빠른 평균 성능.

[표] 핵심 용어 4종.

용어 정의
해시 함수 키 → 주소 계산 공식
해시 테이블 데이터가 저장되는 배열
버킷(Bucket) 해시 테이블의 한 칸(여러 슬롯 보유 가능)
슬롯(Slot) 한 데이터가 들어가는 가장 작은 단위

[표] 해시 함수 5종 — 정처기 출제는 이 다섯이 전부.

함수 동작 한 줄
제곱법(Mid-Square) 키를 제곱한 뒤 가운데 자릿수 추출
폴딩법(Folding) 키를 일정 길이로 나눠 접어서 더하기
기수 변환법(Radix) 키의 진법을 다른 진법으로 변환
숫자 분석법(Digit Analysis) 분포가 고른 자릿수만 골라 사용
제산법(Division) 키를 소수로 나눈 나머지 사용(가장 흔함)

💡 비유 도서관 청구기호 — 책 제목(키)을 청구기호(해시 값)로 바꾸면 몇 층 몇 칸인지 바로 계산. 한 권씩 둘러볼 필요 없음. 자바 HashMap·파이썬 dict가 표준 해시 자료구조. 🔑 암기 제폴기숫제곱·딩·수변환·자분석·산. 직접 계산 문제는 거의 없고 이름·키워드 매칭까지만. 🎯 빈출 '해시 함수가 아닌 것은?'·'소수로 나눈 나머지 → 제산법' 매칭 매 회차.

해시 충돌 해결 — 개체 ·충돌·

[정의] 서로 다른 키가 같은 주소로 계산되는 충돌(Collision) 해결법은 딱 두 분류.

분류 동작 한 줄 세부 기법
① 개방 주소법(Open Addressing) 충돌 시 다른 빈 자리를 찾아 들어감 선형 조사법·이차 조사법·이중 해싱
② 체이닝(Chaining) 충돌 시 같은 자리에 연결 리스트로 매닮 분리 연쇄법

[표] 개방 주소법 세부 3종.

세부 기법 동작
선형 조사법 충돌 → 바로 옆 칸을 차례로 확인(한 칸씩)
이차 조사법 충돌 → 1², 2², 3² 씩 건너뛰며 확인
이중 해싱 충돌 → 또 다른 해시 함수로 계산해 이동

💡 비유 내 좌석에 다른 사람이 앉았을 때 — 옆 빈자리로 옮기면 개방 주소법, 그 사람 옆에 의자를 끌어다 붙이면 체이닝. 🔑 암기 개체방 주소법 vs 이닝. '연결 리스트' 키워드 → 체이닝 / '선형·이차·이중' → 모두 개방 주소법. ⚠️ 함정 '선형 조사법은 체이닝의 일종'·'체이닝은 다른 빈 자리를 찾는다' 보기는 거꾸로. 체이닝 = 같은 자리에 매달기, 개방 주소법 = 다른 빈 자리. 📝 기출 '연결 리스트로 매다는 방식은?' → 체이닝.


기출 다지기

[기출 1 출제] 다음 자료를 오름차순 선택 정렬 할 때 1회전(Pass) 후의 결과 는? (1회전 추적형)

텍스트
초기 배열: 9, 4, 5, 11, 8
  • ① 4, 9, 5, 11, 8
  • ② 4, 5, 9, 11, 8
  • ③ 4, 5, 8, 9, 11
  • ④ 9, 5, 4, 11, 8
정답 및 해설 보기

정답 ①

선택 정렬 1회전 = 전체에서 최솟값을 찾아 맨 앞과 교환. 최솟값 4를 1번 자리(9)와 바꾼다 → [4, 9, 5, 11, 8].

선지 판정 근거
① 4, 9, 5, 11, 8 정답 맨 앞에 최솟값 4 확정
② 4, 5, 9, 11, 8 오답 2회전 결과(5까지 확정)
③ 4, 5, 8, 9, 11 오답 정렬 완료 상태
④ 9, 5, 4, 11, 8 오답 의미 없는 임의 배열

🔑 선택 1회전 → 맨 앞 한 자리에 최솟값 확정.

[기출 2 출제] 다음 자료를 오름차순 삽입 정렬 할 때 PASS 1의 결과 로 옳은 것은? (1회전 추적형)

텍스트
초기 배열: 8, 3, 4, 9, 7
  • ① 3, 8, 4, 9, 7
  • ② 3, 4, 8, 9, 7
  • ③ 3, 4, 7, 8, 9
  • ④ 8, 3, 4, 7, 9
정답 및 해설 보기

정답 ①

삽입 정렬 1회전 = 2번째 원소를 꺼내 앞쪽 정렬 부분에 끼움. 3을 꺼내 8 앞으로 → [3, 8, 4, 9, 7].

선지 판정 근거
① 3, 8, 4, 9, 7 정답 앞 두 자리 정렬
② 3, 4, 8, 9, 7 오답 2회전 결과(4가 앞으로)
③ 3, 4, 7, 8, 9 오답 정렬 완료 상태
④ 8, 3, 4, 7, 9 오답 잘못된 추적

🔑 삽입 1회전 → 앞 두 자리 정렬. 이 문제는 선택 정렬도 [3, 8, 4, 9, 7]로 우연히 같으니, 문제가 어떤 정렬을 묻는지 첫 줄을 다시 확인.

[기출 3 출제] 다음 자료를 오름차순 버블 정렬 할 때 1회전(Pass) 후의 결과 는? (1회전 추적형)

텍스트
초기 배열: 9, 6, 7, 3, 5
  • ① 3, 5, 6, 7, 9
  • ② 6, 7, 3, 5, 9
  • ③ 3, 9, 6, 7, 5
  • ④ 6, 9, 3, 5, 7
정답 및 해설 보기

정답 ②

옆 자리 비교로 큰 값을 끝까지 뒤로 보낸다.

텍스트
초기:  [9, 6, 7, 3, 5]
9>6 교환  [6, 9, 7, 3, 5]
9>7 교환  [6, 7, 9, 3, 5]
9>3 교환  [6, 7, 3, 9, 5]
9>5 교환  [6, 7, 3, 5, 9]
선지 판정 근거
① 3, 5, 6, 7, 9 오답 정렬 완료 상태
② 6, 7, 3, 5, 9 정답 맨 뒤에 최댓값 9 확정
③ 3, 9, 6, 7, 5 오답 잘못된 추적
④ 6, 9, 3, 5, 7 오답 잘못된 추적

🔑 버블 1회전 → 맨 뒤에 최댓값. 선택(앞·최솟값)과 정반대 방향.

[기출 4 출제] 다음 정렬 알고리즘 중 평균 시간복잡도가 O(n²)가 아닌 것은? (시간복잡도 분류형)

  • ① 선택 정렬(Selection Sort)
  • ② 삽입 정렬(Insertion Sort)
  • ③ 버블 정렬(Bubble Sort)
  • ④ 퀵 정렬(Quick Sort)
정답 및 해설 보기

정답 ④

퀵 정렬은 분할정복으로 데이터를 절반씩 줄여 평균 O(n log n). 단순 3개(선·삽·버)만 O(n²).

선지 판정 근거
① 선택 오답 단순 3 — O(n²)
② 삽입 오답 단순 3 — O(n²)
③ 버블 오답 단순 3 — O(n²)
④ 퀵 정답 분할정복 — 평균 O(n log n)

🔑 단순 3(선삽버)=O(n²), 고급 3(퀵·병합·힙)=O(n log n). 단 퀵 최악은 O(n²)(피벗 의존).

[기출 5 출제] 다음 정렬된 데이터 에서 이분 탐색 으로 값 15 를 찾을 때 비교 횟수는? (이분 탐색 추적형)

텍스트
[1, 3, 5, 7, 9, 11, 13, 15, 17]
  • ① 1회
  • ② 2회
  • ③ 3회
  • ④ 4회
정답 및 해설 보기

정답 ③

매번 중간 값을 보고 절반씩 후보를 줄인다.

텍스트
1회: 중간 9   9 < 15   오른쪽 [11,13,15,17]
2회: 중간 13  13 < 15  오른쪽 [15,17]
3회: 중간 15  찾음
선지 판정 근거
① 1회 오답 첫 중간이 9라 한 번에 못 찾음
② 2회 오답 두 번째 중간이 15가 아님
③ 3회 정답 위 추적 그대로
④ 4회 오답 일반 구현에서 발생 안 함

🔑 N개에서 최대 비교 = log₂N(올림). 9개 → log₂9 ≈ 3.17 → 약 3회.

[기출 6 출제] 해시 충돌 발생 시 같은 해시 주소에 연결 리스트를 매달아 저장하는 방식은? (키워드 매칭형)

  • ① 선형 조사법(Linear Probing)
  • ② 이차 조사법(Quadratic Probing)
  • ③ 이중 해싱(Double Hashing)
  • ④ 체이닝(Chaining)
정답 및 해설 보기

정답 ④

충돌 해결은 개체(개방 주소법 vs 체이닝). '연결 리스트로 매닮' = 체이닝.

선지 판정 근거
① 선형 조사법 오답 개방 주소법 — 옆 칸 확인
② 이차 조사법 오답 개방 주소법 — 1²·2²·3² 건너뛰기
③ 이중 해싱 오답 개방 주소법 — 또 다른 해시 함수
④ 체이닝 정답 연결 리스트로 매닮

🔑 '연결 리스트' → 체이닝 / '선형·이차·이중' → 모두 개방 주소법.

[기출 7 출제] 그래프의 너비 우선 탐색(BFS)을 구현할 때 사용되는 자료구조는? (키워드 매칭형)

  • ① 스택(Stack)
  • ② 큐(Queue)
  • ③ 트리(Tree)
  • ④ 해시 테이블(Hash Table)
정답 및 해설 보기

정답 ②

BFS는 가까운 정점부터 차례로 방문 → 먼저 발견한 정점을 먼저 방문 → 큐(FIFO). DFS는 최근 발견한 정점부터 깊이 → 스택(LIFO).

선지 판정 근거
① 스택 오답 DFS 자료구조(거꾸로 함정)
② 큐 정답 BFS 자료구조
③ 트리 오답 그래프의 한 종류이지 탐색 자료구조 아님
④ 해시 테이블 오답 빠른 검색용, 탐색 알고리즘 자료구조 아님

🔑 BFS=큐, DFS=스택. 변형 출제 거의 없는 매 회차 단골.


한 장 요약

영역 핵심 암기팁
그래프 표현 O(V²)=인접 행렬 / O(V+E)=인접 리스트 (공간 복잡도로 판별)
그래프 탐색 BFS=큐(가로·최단) / DFS=스택(세로·백트래킹) BFS=큐·DFS=스택
완전 이진 트리 + 부모-자식 크기 규칙 → 우선순위 큐 (최대 힙=루트 최댓값)
정렬 핵심 암기팁
8종 분류 단순 3=O(n²) / 고급 3=O(n log n) / 셸 n^1.5 / 기수 dn 선삽버퀵병힙셸기
1회전 추적 선택=앞 최솟값 / 삽입=앞 영역 늘어남 / 버블=뒤 최댓값 선삽버
퀵 함정 평균 O(n log n)·최악 O(n²)(피벗 의존) (병합·힙은 최악도 보장)
안정성 삽입·버블·병합·기수=안정 / 선택·셸·퀵·힙=불안정 삽버병기 / 선셸퀵힙
탐색·해싱 핵심 암기팁
탐색 3종 순차 O(n)·이분 O(log n)·해싱 O(1) 순이해
이분 탐색 정렬 전제 필수 + 최대 비교 log₂N(올림) (함정 1순위)
해시 함수 5종 제곱·폴딩·기수변환·숫자분석·제산 제폴기숫제
충돌 해결 개방 주소법(선형·이차·이중) vs 체이닝(연결 리스트) 개체

🎯 합격 한 끗: 가장 잦은 세 유형 = 선·삽·버 1회전 추적(선삽버) + 이분 탐색 정렬 전제(순이해) + 해싱 충돌 매칭(개체). 매 회차 출제의 80%. 단골 함정 3종 = '이분 탐색은 정렬 없이도 빠르다'(→정렬 전제 필수), '퀵은 항상 O(n log n)'(→최악 O(n²)), 'BFS=스택·DFS=큐'(→반대). 다섯 묶음(선삽버·선삽버퀵병힙셸기·순이해·제폴기숫제·개체)만 손에 박으면 11강은 거뜬.

전체 목록 필기 이론

합격까지

정처기, 혼자 막막하다면

초개인화 학습앱 Klue와 에듀윌 온라인강의로 합격까지 이어가세요.