프로그래밍/알고리즘
[알고리즘] 백트래킹 - 백준 단계별로 풀어보기
강민재02
2024. 7. 25. 15:01
728x90
들어가며
이번 챕터는 백트래킹입니다. 특별한 개념은 아니고, 재귀 함수의 콜스택을 이용하여 모든 경우의 수를 탐색하는 알고리즘 입니다.
백트래킹
- 재귀 함수를 이용하여 제약 조건 내 모든 경우의 수를 시뮬레이션하는 알고리즘입니다.
- 제약 조건을 잘 설정하는 것이 관건입니다.
- 당연한 얘기지만 재귀 함수를 이용합니다.
알고리즘의 구조
def backtracking(매개 변수):
if 탈출조건:
# 탈출 실행
if 제약범위안:
# 실행
# 다음 단계로
# 실행 취소
return Any # return의 이용 여부는 사용자에게 달려있음
예시
백트래킹 알고리즘은 미로 찾기와 같이 시뮬레이션이 필요한 문제를 푸는데 많이 사용됩니다.
보통 다음의 형태로 많이 사용됩니다.
int backtracking(int col){
int cnt=0;
if(col<=0){ // 탈출 조건
return 1;
}
for(int i=1; i<=N; i++){
if(!row[i] && !slope[i+col] && !dslope[15+col-i]){ // 제약 조건
row[i] = slope[i+col]=dslope[15+col-i]=true; // 실행
cnt += backtracking(col-1); // 다음 단계로
row[i] = slope[i+col]=dslope[15+col-i]=false; // 실행 취소
}
}
return cnt;
}
728x90