알고리즘
[알고리즘] 백트래킹
rubato.dev
2025. 7. 24. 12:01
- 현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘
📕 문제 1. N과 M (1)
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
- 1부터 N까지 자연수 중에서 중복없이 M개를 고른 수열
- 해결 아이디어
비어있는 리스트에서 시작해 수를 하나씩 추가하면서 길이가 M인 수열이 완성되면 출력
- e.g. N: 4, M: 2 == 1부터 4까지 자연수 중 중복없이 2개를 고른 수열
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
answer = [0] * M
visited = [False] * (N+1)
def backtrack(k): # k번째 인덱스에 값을 넣는 함수
if k == M:
print(*answer)
return
for i in range(1, N+1):
if not visited[i]:
answer[k] = i
visited[i] = True
backtrack(k+1)
visited[i] = False
backtrack(0)
💻 연습 문제
ℹ️ 참고