백트래킹(Back Tracking)

2023. 7. 17. 12:00·알고리즘/알고리즘 정리
728x90

백트래킹 이란?

완전 탐색을 하던 도중, 현재의 탐색이 무의미한 경우 되돌아가는 알고리즘을 의미한다.

말 그대로 모든 경우의 수에 대해서 탐색을 하던 도중, 조건과 맞지 않을 경우에 대해서는 탐색을 하지 않고 돌아간다는 뜻이다.

 

유명한 문제로 N-Queens 문제가 존재한다.


특징

  • 모든 경우의 수를 탐색하지 않기 때문에 완전탐색보다 시간적으로 효율적이다.
  • 탐색 중 조건에 맞지 않는 경우 이전 과정으로 돌아가야 하기 때문에, 재귀를 사용해야 하는 경우가 많다.
  • 조건에 맞지 않는 다면, 이전의 어떤 지점으로 돌아갈 지 정하는 것이 중요하다.
  • 가지치기를 어떻게 구성하느냐에 따라 코드의 효율이 달라진다.
  • 주로 백트래킹을 구현하다 보면, void함수와 전역 변수를 쓰면 쉽게 풀리는데 이는 다른 알고리즘에서 자중하는 편이 좋다.

가지치기

  • 조건에 맞지 않는 부분에 대해 탐색하는 것을 그만둠.
  • 이전의 위치로 되돌아간 후에 다시 다른 경로를 탐색함.
  • 이를 통해 많은 시간적 이율을 얻을 수 있다.

대체 방안

백트래킹 문제는 다른 풀이법으로 문제를 풀 수 있는 경우가 많다.

 

비트마스킹

- 비트(0과 1)의 연산을 활용한 알고리즘.

- 배열의 원소 상태가 2가지로 나뉠 수 있는 백트래킹 문제에서 활용 가능.

- 백트래킹이 아닌 완전탐색이므로 속도는 백트래킹 보다 느림.

 

순열

- 원소의 순서를 정해야 하는 백트래킹 문제에서 활용가능.

- 이 또한 완전탐색이므로 속도는 백트래킹 보다 느림.


연관 문제

 

문제 - 1 페이지

 

www.acmicpc.net

 

저작자표시 (새창열림)

'알고리즘 > 알고리즘 정리' 카테고리의 다른 글

인접 행렬 & 인접 리스트 (Adjacency Matrix & Adjacency List)  (1) 2023.08.11
분할 정복 (Devide & Conquer)  (0) 2023.07.22
그리디 알고리즘 (Greedy Algorithm)  (0) 2023.07.20
다이나믹 프로그래밍(Dynamic Programming)  (26) 2023.07.19
'알고리즘/알고리즘 정리' 카테고리의 다른 글
  • 인접 행렬 & 인접 리스트 (Adjacency Matrix & Adjacency List)
  • 분할 정복 (Devide & Conquer)
  • 그리디 알고리즘 (Greedy Algorithm)
  • 다이나믹 프로그래밍(Dynamic Programming)
기짜낭
기짜낭
생각이 많지만, 지금 내가 해야할 것을 하자.
  • 기짜낭
    So tired
    기짜낭
    • 분류 전체보기 (199)
      • 개발 (11)
        • Javascript (19)
        • Typescript (5)
        • Canvas (8)
        • React (13)
        • C (3)
      • 활동 (63)
        • 개인 프로젝트 (33)
        • 나눔 서포터즈 3기 (9)
        • 멋쟁이 사자처럼 (7)
        • 0&1 C++ 자료구조 스터디 (0)
        • 제 9회 창업 아이디어톤 (3)
        • Poom (ZeroWasteShop) (3)
        • 해커톤 (2)
        • 우테코 프리코스 7기 (6)
      • 알고리즘 (27)
        • 알고리즘 정리 (5)
        • 백준 (18)
        • 프로그래머스 (4)
      • 강연 (7)
      • 독서 (18)
      • 회고 & 생각 (16)
        • 연간회고 (4)
      • 기타 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • ※ 예전 블로그
  • 인기 글

  • 태그

    에리카
    react
    디자인
    프로젝트
    우테코
    한양대학교
    대학
    canvas
    개발
    1주 1권
    개념
    ES6
    TypeScript
    백준
    알고리즘
    Erica
    독서
    1주에 1권씩
    HTML
    개발자
    프로그래밍
    Javascript
    타입스크립트
    3기
    군대
    HTML5
    CSS
    프론트엔드
    독후감
    tutorial
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
기짜낭
백트래킹(Back Tracking)
상단으로

티스토리툴바