자료구조?

데이터를 효율적으로 저장하고, 관리하고, 처리하기 위한 구조

어떻게 담고, 꺼내고, 수정할지를 설계

 

필요한 이유?

효율성 : 같은 연산이라도 자료구조에 따라 속도가 다르다.

편리성 : 상황에 맞는 자료구조를 쓰면 코드가 단순해진다.

 

분류

선형 자료구조 (Linear)
데이터가 일렬로 나열된 구조
비선형 자료구조 (Non-Linear)
데이터가 계층적/네트워크적으로 연결된 구조
배열(Array) : 빠른 인덱스 접근 트리(Tree) : 부모-자식 관계 (예: 이진 탐색 트리, 힙)
연결 리스트(Linked List) : 삽입/삭제 용이 그래프(Graph) : 노드와 간선으로 연결된 구조 (예: 지도, SNS 친구 관계)
스택(Stack) : LIFO (후입선출) 해시(Hash Table) : 키(key)로 데이터에 빠르게 접근
큐(Queue) : FIFO (선입선출)  
덱(Deque) : 양쪽에서 넣고 뺄 수 있음  

 

선형 자료구조 (Linear)

1. 배열(Array)

 

  • 인덱스를 이용해 O(1)로 접근 가능
  • 하지만 크기가 고정되어 있고, 중간 삽입/삭제는 O(n)

 

 

1 - (1) 구간합 (= 누적합, Prefix Sum)

  • 배열의 구간 합을 빠르게 계산하는 방법
  • 미리 누적합 배열을 만들어두면 O(1)로 구간 합 계산 가능

 

1 - (2) 투 포인터 (Two Pointers)

  • 두 개의 포인터(인덱스)를 움직이면서 문제 해결
  • 정렬된 배열에서 두 수의 합, 부분 배열 문제 등에 자주 사용

 

1 - (3) 슬라이딩 윈도우 (Sliding Window)

  • 일정한 크기의 창(윈도우)을 이동시키면서 연속된 부분 구간을 다루는 방식
  • 예: 연속된 K개 원소의 최대합

 

2. 연결 리스트 (Linked List)

 

 

  • 각 원소가 데이터 + 다음 노드 주소를 저장하는 구조
  • 장점: 삽입/삭제 O(1) (포인터 변경만 하면 됨)
  • 단점: 인덱스로 접근 불가 → 탐색 O(n)

 

3. 스택 (Stack)

 

  • LIFO (Last In First Out) 구조 → 나중에 들어온 게 먼저 나감
  • 주요 연산: push, pop, peek
  • 주로 괄호 검사, DFS, 실행 취소 기능(Undo)

 

4. 큐 (Queue)

 

  • FIFO (First In First Out) 구조 → 먼저 들어온 게 먼저 나감
  • 주요 연산: enqueue, dequeue
  • 주로 프로세스 스케줄링, BFS 탐색

 

5. 덱, 디큐 (Deque, Double-Ended Queue)

 

  • 양쪽 끝에서 삽입/삭제 가능한 큐
  • 스택+큐 기능을 모두 가짐
  • 주로 슬라이딩 윈도우 최댓값 문제, 양방향 탐색

 

마치며

정처산기를 준비하면서 스택과 큐는 많이 본 것도 있고,

배열에서, 구간합이나, 투포인터, 슬라이딩 윈도우는 새롭게 느껴졌다.

다음에는 비선형도 이해하지

 

 

 

 

'Etc > study' 카테고리의 다른 글

[4주차] 유니온 파인드 알고리즘  (0) 2025.10.17
[4주차] 세그먼트 트리  (0) 2025.10.16
[3주차] 비선형 자료구조  (0) 2025.10.06
[2주차] 정렬 알고리즘  (0) 2025.09.30
[1주차] 시간 복잡도  (0) 2025.09.29

+ Recent posts