# **완전탐색** | |
문제를 해결하는 방법중 가장 기초 | |
가능한 모든 경우를 시도해 보는것입니다. | |
문제가 주어지면 제일먼저 완전 탐색법으로 시도해보아야합니다. | |
가능한 모든 경우 = 탐색 공간 (search space) : 고려해야하는 모든 경우 | |
완전 탐색법은 가능한 모든경우를 하나도 빠짐없이 모두 고려하기 때문에 | |
틀릴 경우가 가장 적지만, 시간은 최대로 소요됩니다. | |
모든 가능성을 따져봐야 하기때문에 문제의 크기가 클수록 , 실행시간이 지수적으로 증가할수 있습니다. | |
대회에 참가하거나 | |
아주 어려운 문제에 직면한 경우, 완전 탐색법을 적용하는것이 좋습니다. | |
실행시간 제한에 의해 실패할수 있지만, 정답 크기가 적은 경우에 부분점수를 획득할 수 있기때문입니다. | |
완전 탐색을 할 수있는 방법 | |
1. brute force - 그냥 다 해보기 | |
2. bfs -그래프로 표현하여 다 탐색하기 | |
3. 재귀 | |
4. 비트 마스크 | |
5. 순열 | |
6. 백 트래킹 | |
등등이 있습니다. | |
> brute force | |
for문과 if문을 이용하여 처음부터 쭉 다 탐색해 보는 방법입니다. | |
여기서 중요한 것은 범위입니다. | |
시간초과가 될수 있기때문에 잘 생각하며 풀어야합니다. | |
>>재귀로 푸는것과의 차이를 보고 한눈에 파악해봅시다. | |
## brute force | |
#include <stdio.h> | |
int sum(int n); | |
int main(void){ | |
printf("%d",sum(10)); | |
} | |
int sum(int n){ | |
int result =0; | |
for(int i=1;i<=n;i++) | |
result+=i; | |
return result; | |
} | |
## 재귀 | |
#include <stdio.h> | |
int sum(int n); | |
int main(void){ | |
printf("%d",sum(10)); | |
} | |
int sum(int n){ | |
if(n==1) | |
return 1; | |
else | |
return n+sum(n-1); | |
} | |
'알고리즘' 카테고리의 다른 글
[프로그래머스] level 1 - 시저암호 (0) | 2020.05.16 |
---|---|
[프로그래머스] level 1 - 비밀지도 (0) | 2020.05.08 |
[프로그래머스] level 1 - 크레인 인형뽑기 게임 (0) | 2020.05.04 |
[프로그래머스] level 1 - 완주하지 못한 선수 (0) | 2020.05.03 |
탐욕적 알고리즘 (0) | 2018.12.24 |
댓글