코테/알고리즘

백트래킹

imname1am 2023. 8. 24. 17:01
반응형

 

📍 정의 및 특징

브루트포스에서 가지치기 진행

- DFS의 한 종류 (재귀)

- N이 최대 10으로 작을 경우, 백트래킹 가능

 

#가지치기 #DFS #재귀

 

 

📍 시간 복잡도

▷ 중복 가능한 경우

  ⋄ N^N
  ⋄ N = 8 까지 가능

 

▷ 중복 불가한 경우

  ⋄ N !
  ⋄ N = 10 까지 가능

 

 

📍 필요 변수

방문 여부 확인 배열 : boolean[]  - 중복 확인용

선택값 입력 배열      : int[]

 

 

📍 실행 과정

  1. 종료 조건
  2. 재귀 위한 for문
    - 순열
    : for문, 0부터 시작 / 조합 : for문, startIdx부터 시작
    1) 결과값 추가
    2) 재귀               ; 함수 호출할 때마다 매개변수 값 갱신하는 식으로 동작
public static void recur(int startIdx, int depth) {
    // 1) 재귀 종료 조건
    if(depth == M) {
        return;
    }


    // 2) 재귀 위한 for문
    for(int i = 0 ; i < N ; i++) {
        result[depth] = A[i];	// 결과값 배열 갱신
        
        (방문 여부 체크 - 중복X인 경우)
        
        recur(num + 1);	// 🔔 재귀
    }
}

 

 

📍 문제 유형

  • 조합 / 순열 생성
  • 그래프 문제 - 경로 탐색, 연결 요소 찾기, MST 등
  • 최적화 문제 - 최적해 탐색
  • 외판원 순회 문제 (TSP)
  • 제약 조건 확인
  • 스도쿠, N-Queens 등 게임과 퍼즐 문제

 

 

➕ 예제

- N과 M 시리즈

ㅇ 리스트 활용

 

[코드트리/INTERMEDIATE LOW] n개 중에 m개 뽑기 (JAVA)

🔺 문제 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석 국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

bono039.tistory.com

 

ㅇ 방문 배열 활용

 

[백준/JAVA] 15657번: N과 M (8)

🔺 문제 15657번: N과 M (8) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수

bono039.tistory.com

 

 

[백준/JAVA] 1759번: 암호 만들기

🔺 문제 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것

bono039.tistory.com

 

 

[백준/JAVA] 6603번: 로또

🔺 문제 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의

bono039.tistory.com

 

[백준/JAVA] 9663번: N-Queen

🔺 문제 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.ne

bono039.tistory.com

 

[백준/JAVA] 10971번: 외판원 순회 2

🔺 문제 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이

bono039.tistory.com

 

[백준/JAVA] 15686번: 치킨 배달

🔺 문제 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c

bono039.tistory.com


(참고)

 

백트래킹 알고리즘 (Back Tracking)

다음과 같은 그래프가 있다. 여기서 1부터 시작해서 숫자 순서대로 얼마나 멀리 갈 수 있는지 찾고싶다. 즉 1->2->3->4->5->... 이런식의 루트를 찾으려 한다. 우선 생각해볼 수 있는 방법은, 그냥 모

nahwasa.com

 

백트래킹(Backtracking) (수정 2019-10-09)

탐색 중에서는 가장 마지막으로 쓰는 글이 아닐까 싶습니다. 이제 DFS와 BFS도 익혔으니, 백트래킹(b...

blog.naver.com

 

반응형