sugang
sugang'study
sugang
전체 방문자
오늘
어제
  • 분류 전체보기
    • [OS]
    • [취업정보]
    • [Server]
    • [Algorithm]
    • [Database]
    • [MyTravel]
    • [Network]

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • n

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sugang

sugang'study

백준-15649-백트래킹 1
[Algorithm]

백준-15649-백트래킹 1

2021. 9. 26. 02:45

백트래킹이란? 

해를 찾는 도중 해가 아니어서 막히면, 되돌아가서 다시 해를 찾아가는 알고리즘

반복문의 횟수까지 줄일 수 있으므로 효율적이다. 가지치기 (반복문 횟수 줄이기)에 따라 성능이 좌우된다. -최악의 경우에는 여전히 지수함수 시간이 걸린다

-즉, 특정한 조건을 만족하는 경우만 살펴보는 것이다.

주로 문제 풀이에서는 DFS 등으로 모든 경우의 수를 탐색하는 과정에서, 조건문을 걸어 답이 될 수 없는 상황을 정의하고, 그러한 상황일 경우에는 탐색을 중지시킨 뒤 그 이전으로 돌아가서 다시 다른 경우를 탐색하게끔 구현한다.

 

백트래킹 코드 진행 방향

  • - 탐색 여부 파악
  • - 결과 리스트에 저장
  • - 재귀함수 
    • 깊이가 M인 경우 탈출 (미탐색 시 진행 for 중복제거)
    • 탐색 시작 시 탐색여부 바꿔주고 탐색 내용 append
    • 탐색 후 탐색내용 pop , i++

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
N, M  = map(int,input().split())
 
visited = [False]*N
result = []
 
def solve(depth, N,M) :
    if depth == M :
        print(' '.join(map(str,result)))
        return 
    for i in range(len(visited)) : 
        if visited[i] == False :  
            visited[i]=True
            result.append(i+1)
            solve(depth+1,N,M) # 깊이 우선 탐색 
            visited[i]=False
            result.pop()
            
solve(0,N,M)
 
 
cs

 

재귀 함수 부분이 진행되는 과정을 파악하기 위해 써보았다.

 

 

 

참고: https://wlstyql.tistory.com/56

'[Algorithm]' 카테고리의 다른 글

[백준] - 2839 설탕배달  (0) 2022.05.27
[백준] 9251-LCS  (0) 2022.05.25
백준 11792- [재귀함수] 하노이 탑 이동순서  (0) 2021.09.28
백준1158번 [자료구조]-요세푸스  (0) 2021.09.25
소수, 최대공약수, 최소공배수 구하기  (0) 2021.08.09
    '[Algorithm]' 카테고리의 다른 글
    • [백준] 9251-LCS
    • 백준 11792- [재귀함수] 하노이 탑 이동순서
    • 백준1158번 [자료구조]-요세푸스
    • 소수, 최대공약수, 최소공배수 구하기
    sugang
    sugang

    티스토리툴바