algorism

[알고리즘]문제 유형별 알고리즘 선택 기준

Maison 2025. 2. 8. 21:03

풀이의 우선순위는 문제를 봤을 때 어떤 자료구조와 어떤 알고리즘을 사용해야 하는지 판단 할 수 있어야한다.

 

문제의 특성을 확인하고 어떤 자료구조와 알고리즘을 선택할지 파악하자.

 

 

1. 문제를 읽고 핵심 요구 사항 파악하기

 

먼저 문제의 본질을 이해하는것이 중요함.

 

 

  • 입력 크기: 데이터가 크면 시간 복잡도를 고려해야 함.
  • 실시간 처리가 필요한가? → 효율적인 자료구조 필요.
  • 순차적으로 처리하는가? → 배열 or 리스트가 적합.
  • 검색이 중요한가? → 해시맵, 이진 탐색 트리(BST) 고려.
  • 최대/최소 값이 중요한가? → 힙(Heap) 사용.
  • 경로 탐색이 필요한가? → 그래프 알고리즘 DFS, BFS 필요

 

2. 문제 유형별로 적절한 자료구조 및 알고리즘 판단

 

(1) 정렬이 필요한가?

  • 정렬 후 특정 조건을 만족하는 요소 찾기 → 정렬 알고리즘 (퀵 정렬, 병합 정렬)
  • 데이터가 많고 매번 정렬이 필요한가?힙(Heap) 사용 (우선순위 큐)
  • 고유한 값 개수 세기정렬 + 투 포인터 또는 해시셋 사용 
* 고유한 값 개수 세기 유형 문제란?

배열 내에 중복되는 수를 제거한 후 고유 한 숫자의 개수를 찾는 방법
-> Hash 사용 (unorderded_set 사용)

해시셋(unorderded_set)은 삽입/검색이 O(1)으로 매우 빠름.

 


(2) 탐색이 필요한가?

  • 빠른 탐색이 중요이진 탐색 (Binary Search)
  • 연속된 데이터에서 특정 값 탐색슬라이딩 윈도우
  • 그래프에서 탐색 필요DFS, BFS
* 슬라이딩 윈도우란?
 
슬라이딩 윈도우는 고정된 길이 혹은 유동적인 길이의 범위에서 계산하는 기법.
투포인터와 유사하지만, 범위를 확장/축소하며 최적의 결과를 찾는 방식.

 

(3) 데이터 추가/삭제가 자주 발생하는가?

  • 정렬된 데이터 유지하며 삽입/삭제이진 탐색 트리(BST) or 힙(Heap)
  • 가장 최근 데이터를 빠르게 가져와야 함스택(Stack), 큐(Queue), 덱(Deque)
  • 우선순위가 있는 데이터 처리우선순위 큐 (Priority Queue, Heap)
* 각 자료구조 별 반복자(iterator) 및 내부 인덱스 접근 가능 여부

자료구조 반복자 지원 인덱스 접근
vector ✅ O(1) ✅ O(1)
deque ✅ O(1) ✅ O(1)
list(링크드리스트) ✅ O(N)
set / unordered_set ✅ O(log N) / O(1)
map / unordered_map ✅ O(log N) / O(1)

 

(4) 문자열 관련 문제인가?

  • 패턴 찾기 → KMP, 라빈 카프 알고리즘
  • 중복된 문자를 빠르게 찾기 → 해시셋(HashSet)
  • 사전순 정렬 → Trie(트라이)

 

(5) 부분합, 누적합, 최적화가 필요한가?

  • 배열에서 구간합을 자주 계산누적합(Prefix Sum), 세그먼트 트리
  • 최소 비용을 구해야 한다다익스트라 (Dijkstra), 플로이드-워셜 (Floyd-Warshall)

 

3. 입력 크기에 따른 알고리즘 선택

 

문제에서 주어진 입력 크기(N)을 보고 적절한 알고리즘을 선택해야 함.

 

시간 복잡도에 따른 선택 기준

입력 크기(N) 적절한 알고리즘
𝑁 ≤ 10 완전 탐색 (브루트포스) 가능
𝑁 ≤ 100 백트래킹, DP 가능
𝑁 ≤ 10,000 O(𝑁 log 𝑁) 가능 (정렬, 이진 탐색)
𝑁 ≤ 1,000,000 O(𝑁) 이하 가능 (해시, 투 포인터, 슬라이딩 윈도우)
𝑁 > 10,000,000 O(log 𝑁) 이하 알고리즘 필수 (이진 탐색, 세그먼트 트리, 해시)