728x90
재귀함수로 풀 수 있는 브루트 포스
- 순서 : N가지가 있을 때 M를 순서대로 뽑을 경우 O(N!)
- 선택 : N가지에 대해서 선택/선택하지 않는 것 O(2^N)
Problem)
https://www.acmicpc.net/problem/15649
15649번: N과 M (1)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
Solution)
재귀 : 어떤 위치에 올 수 있는 수를 결정해 주는 것
선택 : 그 위치에 있는 것을 선택할지 말지 결정하는 것
Answer)
import sys
n,m = map(int,input().split())
c = [False]*(n+1)
a = [0]*m
def go(index, start, n, m):
if index == m:
sys.stdout.write(' '.join(map(str,a))+'\n')
return
for i in range(start, n+1):
if c[i]:
continue
c[i] = True
a[index] = i
go(index+1, i+1, n, m)
c[i] = False
go(0,1,n,m)
728x90
'코딩테스트' 카테고리의 다른 글
다이나믹 프로그래밍 - 백준 11726 [Python] (0) | 2021.08.04 |
---|---|
다이나믹 프로그래밍 - 백준 1463 [Python] (0) | 2021.08.03 |
브루드 포스 - 백준 1107 [Python] (0) | 2021.07.28 |
브루드 포스 - 백준 1476 [Python] (0) | 2021.07.28 |
브루트 포스 - 백준 2309 [Python] (0) | 2021.07.26 |
댓글