[핵심]
이 문제는 n,m이 8로 제한되어 있어 재귀함수를 이용하지 않아도 상관없다.
하지만 이후에 문제들이 재귀함수를 활용해야 풀리기 때문에 이 문제도 그런 방식으로 공부했다.
재귀함수안에는
1. 일정 조건이 충족되면 출력하는 if문(M개가 쌓이면 출력된다)
2. 사용여부를 체크하고 사용되지 않았으면 stack에 값을 넣어주는 함수
3. 재귀함수 선언 후에, checklist를 다시 False로 바꿔주는 선언문
출력과정을 정리해보자
stack에 1저장 -> stack에 2저장 -> [1,2]출력 후 함수 하나 종료 -> checklist[2] False선언 ->
stack에 3저장 -> [1,3]출력
이 구조를 여러번 그려보자
n,m= map(int,input().split())
checklist = [False]*(n+1)
stack = [0]*m
def recu(idx,n,m):
if idx == m:
print(stack)
return
for i in range(1,n+1):
if checklist[i]: #사용여부 확인
continue
checklist[i] = True
stack[idx] = i
recu(idx+1,n,m)
checklist[i] = False
recu(0,n,m)
'Data Science > 알고리즘 공부' 카테고리의 다른 글
[백준][파이썬] 10991 별찍기(16) (0) | 2020.03.23 |
---|---|
[파이썬][백준] 2444번 별찍기 (0) | 2020.03.20 |
[백준][파이썬] 4763번 셀프넘버 (0) | 2020.03.13 |
[백준][파이썬] 2164번 카드2 (0) | 2020.03.12 |
[백준][파이썬] 4949번 균형잡힌 세상 (0) | 2020.03.12 |
댓글