본문 바로가기
CS/Datastructure & Algorithm

완전탐색이란?

by Jman 2022. 3. 8.

완전탐색이란?

컴퓨터의 빠른 계산 능력을 이용해 가능한 경우의 수를 일일이 나열하면서 답을 찾는 방법을 의미.

이렇게 가능한 방법을 전부 만들어 보는 알고리즘을 일컫는다. 그리고 컴퓨터의 빠른 계산  속도를 잘 이용하는 방법이다.

알고리즘이라고 부르기보단, 문제 푸는 방법이라고 이해하면 좋을 거다.

 

Ex. 알고리즘을 모르는 상태에서, 문제를 풀 때, 가능한 모든 경우의 수를 확인해서 답을 찾아낸다. 이 과정이 완전 탐색이다. 

-> 이럴 경우, 수열의 수가 적을 경우에는 충분히 빠르게 해결하겠지만, 수열의 수가 억 단위일 경우에는 시간복잡도 문제가 생긴다.

따라서, 가능한 경우의 수가 많은 경우에는 이용하기 어려우므로 완전 탐색을 이용할 수 있는지 ? 잘 파악하는게 중요하다.

탐색해야 할 개수가 100만 개 이하일 경우에 사용하면 적절하다.

 

 

완전 탐색 방법 ?

- Brute Force 

- 비트 마스크 (Bitmask)

- 순열 (Permutation)

- 백트래킹

- BFS(너비 우선 탐색) / DFS(깊이 우선 탐색)

 

 

1. 브루트 포스 ( Brute-Force )

: 단순히 for 와 if 를 이용해 문제를 풀어가는 방식이다.

Boj - 유레카 이론(10448), 숫자 야구(2503), 가르침(1062), 사탕게임(3085), 분해합(2231), 일곱 난쟁이(2309), 숫자판 점프(2210)

 

2. 비트마스크 ( Bitemask )

: 2진수(AND, OR, XOR, SHIFT, NOT)를 이용하는 컴퓨터 연산을 이용하는 방식이다.

모든 경우의 수가 각각 원소에 포함되어있거나, 포함되지 않는 두 가지 선택으로 구성되는 경우 유용하게 사용이 가능하다.

비트 마스크를 사용하는 이유는, 정수로 집합을 나타낼 수 있다는 점이다.

Boj - 집합(11723), 해멍 거리(3449), 이진수 연산(12813), 데스스타(11811), 외판원 순회(2098), 중복제거(13701)

 

3. 순열 ( Permutation )

: 서로 다른 n 개 중 r 개를 골라 순서를 고려해 나열한 경우의 수를 말한다.

Ex. 집합의 원소가 { A, B, C } 일 때, 3개의 원소를 모두 사용하여 순서를 고려해 나열하는 경우의 수는?

-> ABC, ACB, BAC, BCA, CBA, CAB, 총 6 경우,

Boj - N과 M(15649~15666), 1,2,3 더하기 2(12101)

 

4. 백트래킹 

: 분할정복을 이용한 기법. 재귀함수를 설계할 때, 고려해야 할 아주 중요한 개념입니다. 

해를 찾아가는 도중에 해가 될 것 같지 않은 경로가 있다면? 더 이상 가지않고 'BACK' 을 합니다.

Boj - 부분 수열의 합(1182), 암호 만들기(1759), 좋은 수열(2661), 미친로봇(1405)

5. BFS / DFS

: 그래프 탐색 방법의 대표적인 두 알고리즘이다 .

BFS - 가까운 노드부터 검색

- 큐 자료구조에 기초(선입선출)

- 시간복잡도 O(N) - 실제 수행시간은 DFS보다 좋은 편 

Boj - 경로 찾기(2479), 섬의 개수(4963), 양(3184), 바이러스(2606), 영역구하기(2583), 단지 번호 붙이기(2667), 탈출(3055), 게리맨더링(17471), 연결요소의 개수(11724), DFS와 BFS(1260), 숨바꼭질(1697), 숨바꼭질2(12851), 상범빌딩(6593), 물탱크(15972), 성곽(2234), 버스 갈아타기(2536), 물통(14867), 미로만들기(2665)

DFS - 특정한 경로로 탐색하다가 특정한 상황에서 최대한 깊숙이 들어가서 노드를 방문한 후, 다시 돌아가 다른 경로를 탐색

- 스택 자료구조에 기초(선입후출)

- 스택을 이용한 알고리즘이기 때문에, 실제 구현은 재귀함수를 이용 했을 때 간결해진다.

- 시간 복잡도 O(N)

Boj - 숫자 고르기(2668), 벽장문의 이동(2666), 하노이 탑(1914), 미로탐색(1912), 루빅의 사각형(2549), 텀 프로젝트(9466), 순열 사이클(10451), N-Queen(9663), 적록색약(10026), 빙산(2573), 부등호(2529)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'CS > Datastructure & Algorithm' 카테고리의 다른 글

버블 정렬(Bubble sort)이란?  (0) 2022.03.13
그래프 탐색이란?  (0) 2022.03.11
깊이 우선 탐색(Depth-First-Search)  (0) 2022.03.11
큐(Queue) 란?  (0) 2022.03.06
스택(Stack) 이란?  (0) 2022.03.06