[자료구조/알고리즘]백트래킹

·

1 min read

목표 : 스택 , 큐 개념과 기본 구현 코드에 대해 알아보자.

✏️백트래킹

현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘
완전 탐색을 하는 도중, 현재 탐색이 무의미한 경우 되돌아가는 알고리즘

왼 : 완전 탐색 진행하는 깊이 우선탐색(DFS)/ 오 : 무의미한 탐색을 건너뛰는 가지치기 방법(백트래킹)

유망함수❓

해가 될 가능성을 판단하기 위해 유망함수를 정의함.

  • 유망함수 예시

{1,2,3,4,5} 중 2개의 숫자를 뽑아서 합이 8을 초과하는 경우 알아내는 백트래킹 알고리즘을 알아보자. 뽑는 순서가 다르면 다른 경우의 수로 간주하자.

01 단계 : 유효한 해의 집합 정의.
[1,2] [1,3] [1,4] [1,5] [2,1] [2,3] [2,4] [2,5] [3,1] [3,2] [3,4] [3,5] [4,1] [4,2] [4,3] [4,5] [5,1] [5,2] [5,3] [5,4]

02 단계 : 정의한 해의 집합을 그래프로 표현.

03단계 : 처음 뽑은 숫자가 4미만이면 백트래킹한다 - 전략 사용.

04 단계 : 이와같이 나머지도 탐색


  • 구현 코드

def 백트래킹(n):
    if 정답이면 :
        출력 or 저장
    else :
        for 모든 자식 노드에 대해 :
            if 유망한지확인(m) :
                자식노드로 이동
                백트래킹(n+1)
                부모노드로 이동

def 유망한지확인(m):
    if 조건에 안맞으면 :
        return False
    return True
출처: https://edder773.tistory.com/75 [개발하는 차리의 학습 일기:티스토리]

(https://www.youtube.com/watch?v=KNysNGNp5t4 강의, 골든레빗 블로그 [코딩테스트 합격자 되기] 백트래킹- 백트래킹과 백트래킹 알고리즘 개념을 이용하여 개념을 익혀보았다.)