자료구조: 해설이 있는 연습 문제

힌트와 해설이 있는 무료 자료구조 객관식 연습 문제, 세 가지 난이도: 핵심 용어와 사실, 개념 적용, 사례와 분석.

무료 연습 문제쉬움

최대 힙 성질(max-heap property)이란 무엇입니까?

다음 문제 →
자료구조 무료로 연습하기지금 자료구조 연습하기매일 무료 문제 5개. 카드 등록이 필요 없습니다.

연습 내용

  1. 쉬움핵심 용어와 사실
  2. 보통개념 적용
  3. 어려움사례와 분석

자료구조 처음부터 배우기

먼저 알아 둘 것: 알고리즘과 복잡도

1자료 구조란 무엇인가

자료 구조는 항목 찾기, 추가, 삭제 같은 특정 연산이 빨라지도록 메모리에 데이터를 조직하는 방법입니다.

모든 것에서 빠른 구조는 없습니다. 구조를 고른다는 것은 어떤 연산을 싸게 만들지 고르는 것입니다. 비용은 빅오로 쓰며, n은 항목의 수입니다.

두 가지 기본 구성 요소는 배열과 연결 리스트입니다.

a7[0]3[1]9[2]4[3]7394∅h

배열은 항목을 한 덩어리의 메모리에 차례로 저장합니다. 컴퓨터가 항목 i의 위치를 계산할 수 있으므로 a[i]를 읽는 데 O(1)이 걸립니다. 맨 앞에 삽입하려면 모든 항목을 밀어야 합니다: O(n).

연결 리스트는 각 항목을 다음 노드를 가리키는 포인터가 있는 노드에 저장합니다. 마지막 포인터는 null입니다. 머리(h)에 삽입하는 것은 포인터 하나만 바꾸므로 O(1)입니다. 하지만 항목 i에 닿으려면 포인터를 i번 따라가야 합니다: O(n).

이중 연결 리스트는 이전 노드를 가리키는 포인터도 있어서 양방향으로 걸을 수 있습니다.

자가 점검 배열에서는 O(1)이지만 단일 연결 리스트에서는 O(n)인 연산은 무엇인가?
  1. 맨 앞에 새 항목 삽입하기
  2. 모든 항목을 한 번씩 방문하기
  3. 인덱스 i의 항목 읽기
  4. 항목을 하나씩 세기

답: 인덱스 i의 항목 읽기. 배열은 항목 i의 주소를 바로 계산합니다. 연결 리스트는 머리에서부터 포인터를 i번 따라가야 합니다. 맨 앞 삽입은 반대 경우로, 리스트에서는 싸고 배열에서는 비쌉니다.

2스택과 큐

스택은 접시 더미와 같습니다. 맨 위에서만 넣고 뺍니다. 마지막에 들어온 것이 먼저 나옵니다: LIFO.

  • push는 맨 위에 항목을 올리고, pop은 맨 위 항목을 제거하며, peek은 제거하지 않고 맨 위를 읽습니다. 모두 O(1)입니다.
  • 쓰임: 편집기의 실행 취소 기능, 프로그램의 호출 스택, 괄호 짝 확인, 깊이 우선 탐색.

큐는 계산대의 줄과 같습니다. 뒤에서 줄을 서고 앞에서 나갑니다. 처음에 들어온 것이 먼저 나옵니다: FIFO.

  • enqueue는 뒤에 추가하고 dequeue는 앞에서 제거합니다. 둘 다 O(1)입니다.
  • 쓰임: 인쇄 작업, 처리를 기다리는 메시지, 너비 우선 탐색.

덱(deque, 양쪽 끝 큐)은 양쪽 끝에서 추가와 제거를 허용합니다. 우선순위 큐는 항상 우선순위가 가장 높은 항목을 먼저 제거하며, 보통 힙으로 만듭니다.

자가 점검 텍스트 편집기의 “실행 취소” 버튼에 가장 알맞은 자료 구조는 무엇인가?
  1. 그래프
  2. 스택
  3. 큐
  4. 해시 테이블

답: 스택. 실행 취소는 가장 최근의 동작을 먼저 되돌려야 합니다: 후입선출. 큐는 가장 오래된 동작을 먼저 취소할 것입니다.

3트리, 힙, 해시 테이블, 그래프

트리에는 맨 위의 노드인 루트가 하나 있습니다. 다른 모든 노드는 부모가 정확히 하나입니다. 자식이 없는 노드는 리프입니다. 노드가 n개인 트리는 간선이 n − 1개입니다.

이진 트리에서는 모든 노드의 자식이 최대 둘입니다. 이진 탐색 트리(BST)는 규칙을 하나 더합니다. 왼쪽 서브트리의 키는 노드보다 작고, 오른쪽 서브트리의 키는 노드보다 큽니다.

BST 탐색은 한 경로를 따라 내려가므로 O(높이)가 듭니다. 균형 트리(AVL, 레드-블랙)는 높이를 log₂ n 가까이로 유지합니다. 정렬된 순서로 키를 삽입하면 높이 n의 사슬이 됩니다.

힙은 모든 부모가 자식보다 작은(최소 힙) 또는 큰(최대 힙) 이진 트리입니다. 최솟값이나 최댓값이 루트에 있으며 삽입과 제거는 O(log n)입니다.

해시 테이블은 키–값 쌍을 저장합니다. 해시 함수가 키를 인덱스로 바꾸므로 삽입과 조회가 평균 O(1)입니다. 같은 인덱스를 갖는 두 키는 충돌이며, 체이닝(칸마다 리스트)이나 개방 주소법(다른 칸을 시도)으로 해결합니다.

그래프는 간선으로 이어진 정점들로 이루어지며, 간선에는 방향이나 가중치가 있을 수 있습니다. 인접 행렬(메모리 O(V²)) 또는 인접 리스트(O(V + E))로 저장합니다.

자가 점검 키 50, 30, 70, 20, 40을 이 순서로 빈 이진 탐색 트리에 삽입한다. 30의 왼쪽 자식은 무엇인가?
  1. 20
  2. 40
  3. 70
  4. 왼쪽 자식이 없다

답: 20. 20은 50보다 작으므로 왼쪽으로 가서 30에 이릅니다. 30보다도 작으므로 다시 왼쪽으로 갑니다. 40은 30보다 크므로 30의 오른쪽 자식이 됩니다.

4단계별 방법

문제는 흔히 과제를 설명하고 어떤 구조가 맞는지 묻거나, 몇 가지 연산 뒤 구조가 어떤 모양인지 묻습니다.

  1. 빨라야 하는 연산을 찾으세요: 위치로 접근, 키로 접근, 가장 새로운 항목, 가장 오래된 항목, 가장 작은 항목, 또는 범위.
  2. 구조와 짝지으세요: 인덱스 → 배열, 키 → 해시 테이블, 가장 새로운 것 → 스택, 가장 오래된 것 → 큐, 가장 작거나 큰 것 → 힙, 정렬된 순서나 범위 → 균형 탐색 트리.
  3. 과제에 필요한 다른 연산의 비용도 빅오로 확인하세요.
  4. 추적 문제에서는 연산을 하나씩 수행하고 매번 뒤의 상태를 적으세요.
  5. 최종 상태를 구조의 규칙에 비추어 확인하세요: LIFO, FIFO, BST 순서, 힙 순서.

5풀이 예제

모든 단계를 따라가 보세요. 다음 단계를 열기 전에 미리 예측해 보세요.

풀이 예제

키 50, 30, 70, 20, 40, 60을 이 순서로 빈 이진 탐색 트리에 삽입한다. 중위 순회는 무엇이며, 60을 탐색하는 데 비교가 몇 번 필요한가?

1

루트 삽입하기

첫 키 50이 루트가 됩니다.

2

30과 70 삽입하기

30은 50보다 작으므로 왼쪽으로 갑니다. 70은 50보다 크므로 오른쪽으로 갑니다.

503070
3

20, 40, 60 삽입하기

20: 50보다 작고 30보다 작으므로 30의 왼쪽. 40: 50보다 작고 30보다 크므로 30의 오른쪽. 60: 50보다 크고 70보다 작으므로 70의 왼쪽.

503070204060
4

중위 순회하기

중위 순회는 왼쪽 서브트리, 노드, 오른쪽 서브트리 순으로 방문합니다.

결과는 20, 30, 40, 50, 60, 70입니다. BST에서는 언제나 키가 정렬된 순서로 나옵니다.

5

60 탐색하기

50과 비교: 더 크므로 오른쪽으로. 70과 비교: 더 작으므로 왼쪽으로. 60과 비교: 찾았습니다.

503070204060

탐색에는 층마다 한 번씩, 비교 3번이 필요합니다.

답

중위 순회: 20, 30, 40, 50, 60, 70. 60의 탐색에는 비교 3번이 필요합니다.

6흔한 실수

  • LIFO와 FIFO를 혼동하는 것. 스택은 가장 새로운 항목을, 큐는 가장 오래된 항목을 돌려줍니다.
  • 연결 리스트가 인덱스로 빠르게 접근할 수 있다고 생각하는 것. 머리부터 걸어가야 합니다.
  • BST가 항상 O(log n)이라고 가정하는 것. 균형 트리만 그렇고, 정렬된 삽입은 O(n)을 줍니다.
  • 해시 테이블의 충돌을 잊는 것. O(1)은 평균이지 최악의 경우가 아닙니다.
  • 순회 방식을 혼동하는 것. 전위: 노드가 먼저. 중위: 노드가 가운데. 후위: 노드가 마지막.
  • 큰 희소 그래프에 인접 행렬을 쓰는 것. O(V²) 메모리를 낭비합니다.
자가 점검 빈 큐에 1, 2, 3을 이 순서로 enqueue한다. 첫 번째 dequeue는 어느 항목을 돌려주는가?
  1. 1, 2, 3 모두 함께
  2. 1
  3. 2
  4. 3

답: 1. 큐는 선입선출이므로 1이 먼저 나갑니다. 3은 스택(pop)의 답으로, 가장 새로운 항목을 돌려줍니다.

7시험 문제의 유형

  • 쉬움: 핵심 용어와 사실. LIFO와 FIFO, 노드·루트·리프란 무엇인가, BST 규칙, 해시 함수가 하는 일.
  • 보통: 개념 적용. 과제에 맞는 구조, push와 pop 또는 BST 삽입의 결과, 트리 순회, 선형 탐사를 쓰는 해시 테이블, 빅오 비용.
  • 어려움: 사례와 분석. 균형 트리, 배열로 저장한 힙, B-트리, 트라이, 유니온-파인드, 블룸 필터, LRU 캐시 같은 설계.

인덱스 0부터 배열에 저장한 힙에서 인덱스 i의 자식은 2i + 1과 2i + 2에 있고, 부모는 ⌊(i − 1) / 2⌋에 있습니다.

앱에서 단계별로 배우기앱에서 단계별로 배우기

예제 문제

예제 1쉬움

정적 배열과 동적 배열의 주된 차이는 무엇입니까?

  1. A정적 배열은 인덱스 접근이 더 느리다
  2. B동적 배열은 더 큰 메모리 블록으로 옮겨 가며 커질 수 있다
  3. C동적 배열은 원소를 연결된 노드에 저장하므로 한 번에 하나씩 커질 수 있다
  4. D정적 배열은 숫자만 저장할 수 있다
힌트 보기
  1. Python의 리스트와 Java의 ArrayList가 둘 중 하나의 예입니다.
  2. 오답 두 개를 지웠습니다. 남은 두 개 중 하나가 정답입니다.
정답과 설명 보기

이것이 답인 이유

정적 배열은 크기가 고정되어 있고, 동적 배열은 가득 차면 더 큰 배열을 할당하여 원소를 복사합니다.

답

B · 동적 배열은 더 큰 메모리 블록으로 옮겨 가며 커질 수 있다
예제 2보통

이진 최소 힙에서 extract-min은 어떻게 동작합니까?

  1. A배열의 마지막 원소를 제거한다
  2. B마지막 원소를 루트로 옮기고 아래로 내린다
  3. C루트를 제거하고 모든 원소를 왼쪽으로 한 칸씩 이동시킨다
  4. D모든 리프에서 새로운 최솟값을 찾는다
힌트 보기
  1. 트리를 완전 트리로 유지한 다음 순서를 고칩니다.
  2. 오답 두 개를 지웠습니다. 남은 두 개 중 하나가 정답입니다.
정답과 설명 보기

이것이 답인 이유

마지막 원소가 루트의 빈자리를 채우고, 힙 성질이 성립할 때까지 더 작은 자식과 교환되며, O(log n)이 걸립니다.

답

B · 마지막 원소를 루트로 옮기고 아래로 내린다
예제 3어려움

랭크에 의한 합집합(union by rank)이나 경로 압축 없이, 원소가 n개인 union-find 구조에서 find 한 번의 최악의 경우 비용은 얼마입니까?

  1. AO(1)
  2. BO(α(n))
  3. CO(log n)
  4. DO(n)
힌트 보기
  1. 트리가 퇴화할 수 있습니다.
  2. 오답 두 개를 지웠습니다. 남은 두 개 중 하나가 정답입니다.
정답과 설명 보기

이것이 답인 이유

단순한 합집합은 트리를 긴 사슬로 연결할 수 있으므로 find가 부모 포인터 n − 1개를 따라가야 할 수 있습니다. 두 휴리스틱을 쓰면 거의 상수에 가까워집니다.

답

D · O(n)

질문과 답변

자료구조: 무엇인가요?

모든 것에서 빠른 구조는 없습니다. 구조를 고른다는 것은 어떤 연산을 싸게 만들지 고르는 것입니다. 비용은 빅오로 쓰며, n은 항목의 수입니다.

두 가지 기본 구성 요소는 배열과 연결 리스트입니다.

자료구조: 단계별로 어떻게 배우나요?
  1. 자료 구조란 무엇인가
  2. 스택과 큐
  3. 트리, 힙, 해시 테이블, 그래프
  4. 단계별 방법
  5. 풀이 예제
  6. 흔한 실수
  7. 시험 문제의 유형
자료구조 연습에서는 무엇을 다루나요?
  • 쉬움: 핵심 용어와 사실
  • 보통: 개념 적용
  • 어려움: 사례와 분석

모든 문제에는 선택지가 네 개 있고, 정답은 하나뿐입니다. 막혔나요? 먼저 작은 힌트를 열고, 필요할 때만 전체 해설을 보세요.

연습 방법

  • 모든 문제에는 선택지가 네 개 있고, 정답은 하나뿐입니다.
  • 막혔나요? 먼저 작은 힌트를 열고, 필요할 때만 전체 해설을 보세요.
  • 진행 상황, 틀린 문제, 저장한 문제가 보관되므로 시험 전에 복습할 수 있습니다.

이 주제의 앞뒤 주제

먼저 배우기

이 주제가 포함된 강의

컴퓨터 과학의 다른 주제

인쇄용 학습지

자료구조 무료로 연습하기지금 자료구조 연습하기매일 무료 문제 5개. 카드 등록이 필요 없습니다.