백트래킹의 기본 구조

2024. 4. 9. 15:34· 알고리즘/알고리즘 노트
728x90
def 재귀함수(n):
	if 정답이면 :
		출력 or 저장
	else : 정답이 아니면 :
		for 모든 자식 노드에 대해서:
			if 정답에 유망하다면(답의 가능성이 있으면) :
				자식노드로이동
				재귀함수(n+1)
				부모노드로 이동

 

 

혹은 유망 조건을 따로 함수로 빼줘서 구현한다.

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

def 유망한지확인(m):
	if 조건에 안맞으면 :
		return False
	return True

 

 


# 1182번: 부분수열의 합

n, s = map(int, input().split())
arr = sorted(list(map(int, input().split())))

# 부분수열의 합이 S가 되는 경우의 수
answer = 0

result = []

def backTracking(num):
    if len(result) > 0 and sum(result) == s:
        global answer
        answer += 1
        # return
    
    for i in range(num, n):
        result.append(arr[i])
        backTracking(i+1)
        result.pop()


backTracking(0)
print(answer)

 

그리고 위 코드의 경우처럼 꼭 return을 하지 않고, 답을 구할 수도 있다.

문제마다 다르게 구현할 수 있다.

728x90

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

deque 사용시 주의점  (0) 2024.07.02
파이썬 깊은 복사  (0) 2024.07.01
반복문 돌릴 때 주의할 것  (0) 2024.06.18
2차원 리스트 입력받기  (0) 2023.02.17
2차원 리스트 회전  (0) 2023.02.11
'알고리즘/알고리즘 노트' 카테고리의 다른 글
  • 파이썬 깊은 복사
  • 반복문 돌릴 때 주의할 것
  • 2차원 리스트 입력받기
  • 2차원 리스트 회전
happenundo
happenundo
happenundo
2023~ 개발블로그
happenundo
전체
오늘
어제
  • 분류 전체보기 (207)
    • TIL (3)
    • 알고리즘 (188)
      • 프로그래머스 (47)
      • 백준 (69)
      • 파이썬 문법 (11)
      • 이것이 코딩테스트다 (46)
      • 알고리즘 노트 (6)
      • SQL (8)
    • Spring (4)
      • Spring 입문 (2)
      • 개인 프로젝트 (1)
      • 인텔리제이 (1)
    • CS (8)
      • DB (2)
      • 네트워크 (1)
      • 그외 (5)
    • ~2022 (1)
    • etc (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 다이나믹프로그래밍
  • CS
  • deepcopy
  • 최단거리
  • 괄호변환
  • 이코테
  • 완전탐색
  • 정렬
  • 스택
  • distinct
  • 이것이코딩테스트다
  • DP
  • sql
  • 백준
  • 알고리즘
  • 다익스트라
  • 프로그래머스
  • BFS
  • 큐
  • 우선순위큐
  • 재귀
  • 플로이드워셜
  • 이진탐색
  • 동적프로그래밍
  • 백트래킹
  • BinarySearch
  • dfs
  • 파이썬
  • 그리디
  • 구현

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
happenundo
백트래킹의 기본 구조
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.