본문 바로가기
Data Science/알고리즘 공부

[백준][파이썬] #15649번 N과 M (1)

by titaniumm 2020. 3. 15.

[핵심]

이 문제는 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)

댓글