풀이
import sys
def solve(depth, N, M):
# depth가 M과 같아질 때 리턴
if depth == M:
print(*ans)
return
for i in range(1, N+1):
if visited[i]:
continue
if not ans:
visited[i] = 1
ans.append(i)
solve(depth + 1, N, M)
ans.pop()
visited[i] = 0
elif i > ans[-1]:
visited[i] = 1
ans.append(i)
solve(depth+1, N, M)
ans.pop()
visited[i] = 0
N, M = map(int, sys.stdin.readline().split())
arr = []
for i in range(1, N+1):
arr.append(i)
visited = [0] * (N+1)
ans = []
solve(0, N, M)
구현 아이디어
- (1)의 코드에서 살짝 수정해주면 된다.
- 함수의 실행 부분을 조건을 걸어서 둘로 나눠준다.
- ans가 비었다면 함수 실행 및 재귀
- ans의 마지막 인덱스 요소가 자기보다 크다면 함수 실행 및 재귀
- 잘 작동한다.
'백준' 카테고리의 다른 글
백준 5427 불 (파이썬) (0) | 2022.09.18 |
---|---|
백준 N과 M 3~12 (파이썬) (0) | 2022.09.17 |
백준 15649 N과 M (1) (파이썬) (0) | 2022.09.15 |
백준 2206 벽 부수고 이동하기 (파이썬) (0) | 2022.09.12 |
백준 2660 회장뽑기 BFS (파이썬) (0) | 2022.09.12 |