백트래킹의 기본기를 연습 할 수 있는 좋은 문제집 시리즈이다. 😅 순열 ,조합과 여러가지 상황에 대해 접근법을 연습 할 수 있다.
시리즈 문제집 이므로 대표적으로 (1) 번 문제에대해 다루고 접근법에대해서 간략히 작성 합니다. 👀
시리즈 여러가지 조건에대해서 풀이 접근법
for i in range(n):
if li and li[-1]>i:
continue
# 현재 임시 리스트가 있을경우 리스트 마지막값이 현재 i 의값보다 클경우 pass한다.
numbers=[list(map(int,input().split())]
for i in range(len(numbers):
# index 접근을 통해 문제를 해결한다.
numbers[i]
# 이경우 만들어진 li의 길이를 조건에 추가한다.
if len(li)== target:
answer.append(li)
# 이경우에는 방문여부를 체크하는 visited 배열을 따로 만들어준다.
for i in range(n):
if not visited[i]:
visited[i]=True
back(li+[i])
visited[i]=False
# N과 M(1)
import sys
input =sys.stdin.readline
answer=[]
def back(li):
global M,N
if len(li)==M:
answer.append(li[:])
return
else:
for i in range(1,N+1):
if i in li:
continue
back(li+[i])
def solution():
global N,M,answer
N,M=map(int,input().split())
back([])
for v in answer:
print(*v)
pass
if __name__=="__main__": # 실행되는 부분
solution()
pass