탐색 알고리즘은 주어진 데이터에서 원하는 값을 찾는 방법을 의미합니다. 탐색 알고리즘에는 선형 탐색, 이진 탐색, 깊이 우선 탐색, 너비 우선 탐색 등이 있습니다.
선형 탐색은 데이터를 순서대로 하나씩 비교하면서 원하는 값을 찾는 가장 간단한 방법입니다. 예를 들어, 1부터 10까지의 숫자가 저장된 배열에서 7을 찾으려면, 배열의 첫 번째 원소부터 마지막 원소까지 차례대로 7과 비교하면 됩니다. 선형 탐색은 구현이 쉽지만, 데이터의 크기가 커질수록 비교 횟수가 증가하여 시간 복잡도가 O(n)이 됩니다.
이진 탐색은 데이터가 정렬되어 있을 때 사용할 수 있는 더 빠른 방법입니다. 이진 탐색은 데이터의 중간값과 원하는 값을 비교하면서 범위를 절반씩 줄여나가는 방법입니다.
이진 탐색은 데이터의 크기가 커져도 비교 횟수가 적게 증가하여 시간 복잡도가 O(log n)이 됩니다.
DFS는 그래프나 트리와 같은 자료구조에서 루트 노드부터 시작하여 모든 노드를 방문하는 방법입니다. DFS는 스택이나 재귀함수를 이용하여 구현할 수 있습니다.
코딩테스트에서 DFS를 사용해야 하는 문제 유형은 다음과 같습니다.
DFS를 사용하는 문제 유형은 많습니다. 주의해야 할 점은 재귀적인 특성을 가지기 때문에 문제의 조건에 따라 적절한 종료 조건 및 방문 여부를 체크하는 로직이 반드시 필요합니다. 또한 모든 노드를 방문하기 때문에 시간 복잡도가 높을 수 있어 최적화 기법을 적용할 수 있으면 좋습니다.
BFS는 그래프나 트리와 같은 자료구조에서 노드를 방문하는 방법 중 하나로, 시작 노드부터 인접한 노드들을 모두 방문한 후에 다음 깊이의 노드들을 방문하는 순서로 진행됩니다. BFS는 큐(Queue)라는 자료구조를 사용하여 구현할 수 있습니다. 큐는 선입선출(FIFO)의 원칙을 따르는 자료구조로, 먼저 들어온 데이터가 먼저 나가는 구조입니다. BFS 동작 과정은 다음과 같습니다.
코딩테스트에서 BFS를 사용해야 하는 문제 유형은 다음과 같습니다.
코딩테스트에서 탐색 알고리즘은 매우 중요한 주제입니다. 적절한 탐색 알고리즘을 선택하고 구현할 수 있어야만, 시간 제한 내에 문제를 풀 수 있습니다. 따라서 다른 종류의 탐색 알고리즘에 대해서도 공부하고 연습하는 것이 좋습니다.