[백준 15649][파이썬 15652] N과 M (1)
코드
# 15651번
n,m = list(map(int,input().split()))
# 백트래킹을 위해 사용되는 리스트 s
s = []
def dfs():
# 재귀함수의 조건 특정 입력에 대해서는 자기자신을
# 호출하지않고 종료되어야함 (Base condition)
# 또한 모든 입력은 base condition 으로 수렴해야함
if len(s)==m:
# " "을 띄우고 s 를 출력하는방법
print(' '.join(map(str,s)))
return
for i in range(1,n+1):
if i not in s:
# 중복이 없으면 더해짐
s.append(i)
# 재귀함수를 반복하며 중복이 없는 수를 추가
dfs()
# base 컨디션을 만족하면 출력후 pop 하여 한칸 한칸 비운다
# 이후 남겨진 재귀함수의 반복문이 실행되며 다시 리스트에 값을 추가하며 이를 반복
s.pop()
dfs()
마무리
백트래킹의 기초적인 문제이다. 처음 공부할때는 정말 아에 모르겠어서 이 풀이를 이해하는데만
2일이나 걸렸다.
댓글남기기