본문 바로가기
알고리즘

완전탐색

by u0jin 2018. 12. 10.
# **완전탐색**
문제를 해결하는 방법중 가장 기초
가능한 모든 경우를 시도해 보는것입니다.
문제가 주어지면 제일먼저 완전 탐색법으로 시도해보아야합니다.
가능한 모든 경우 = 탐색 공간 (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);
}


댓글