article thumbnail image
Published 2022. 9. 15. 21:31

풀이

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
복사했습니다!