자료탐색 알고리즘
- 자료탐색
- 수많은 자료 중에서 원하는 자료를 찾는 작업
- 컴퓨터에서 처리되는 핵심 알고리즘 중 하나임
- 탐색키(탐색 시 기준값. 항목과 항목을 구분하는 값)에 해당하는 인덱스 번호(찾는 자료 없으면 -1) 반환
- 자료 탐색 과정
- 기준 정하기 (탐색 키 정하기)
- 자료 비교
- 자료 찾기 (탐색 성공, 실패 판가름)
- 선형 구조 자료 탐색
- 기준은 동일하게 배열 안에 있는 값
| 정렬되지 않은 자료 | 정렬되어있는 자료 | ||
| 순차탐색 순서대로 앞에서부터 하나씩 값을 비교함 |
3 6 1 -----------------> 비교 |
이진탐색 중간 값과 비교하여 작으면 앞, 크면 뒤 비교를 반복함 |
|--------> 2 4 6 8 10 |----> |
- 리스트 형식 자료의 탐색 알고리즘
- 불규칙 선형, 정렬선형, 색인순차, 보간, 이진탐색, 해시 등등
- 트리형식 자료의 탐색 알고리즘
- 이진탐색, 균형이진탐색, AVL, 2-3, red-black tree 등등
- 비선형 구조의 자료탐색
| 깊이 우선 탐색 (DFS- depth first search) | 너비 우선 탐색 (BFS- breadth first search) |
| 시작 노드에서 연결된 간선이 존재하는 경우 계속 깊게 들어가며 탐색하는 알고리즘 (백트래킹) 최하위 레벨 노드에 도달 → 되돌아감 → 다른 길이 연결된 가장 가까운 노드로 이동 → 계속 탐색 |
루트 노드부터 시작하여 깊이가 1인 모든 노드들을 우선비교 탐색 → 싶이 2인 모든 노드 비교탐색 → 깊이 3인 노드들을 대상으로 비교탐색 반복적으로 깊이 증가마며 탐색범위를 확장하는 알고리즘 |
![]() |
![]() |
| 시작: 1 1 → 2 → 3 → 4 → (backtrack) → 6 → (backtrack) → 8 → 12 |
시작: 1 1 → 2, 8 → 3, 6, 9, 12 → 4, 10 |
| ▶ Stack 기반 탐색 기록 | ▶ Queue 기반 탐색 기록 |
![]() |
![]() |
| 경로탐색, 백트래킹 유용 | 최단거리 찾기에 유리 + 자료 깊이 클수록 유리 |
- 코드예시 (C++, BFS)
// BFS (큐)
void bfs(int start) {
unordered_set<int> visited;
queue<int> q;
visited.insert(start);
q.push(start);
while (!q.empty()) {
int current = q.front();
q.pop();
cout << current << " ";
for (int neighbor : graph[current]) {
if (visited.find(neighbor) == visited.end()) {
visited.insert(neighbor);
q.push(neighbor);
}
}
}
}
- 코드예시 (C++, DFS)
// DFS (재귀)
void dfs(int node, unordered_set<int>& visited) {
visited.insert(node);
cout << node << " ";
for (int neighbor : graph[node]) {
if (visited.find(neighbor) == visited.end()) {
dfs(neighbor, visited);
}
}
}'이론공부 > 문제해결, 알고리즘' 카테고리의 다른 글
| 분할정복 알고리즘 / 이분탐색 알고리즘 (0) | 2025.06.24 |
|---|---|
| 다양한 알고리즘 기법 / 단순하게 문제풀기 (1) | 2025.06.21 |
| 그리디 알고리즘 (0) | 2025.06.21 |
| 자료정렬 알고리즘 (0) | 2025.06.20 |
| 문제해결 2 - 자료구조와 문제해결, 논리적사고 기반, 컴퓨팅 사고 기반 (1) | 2025.06.20 |



