해당 문제는 15650번과 같이 라이브러리를 불러와서 풀지 않고 dfs를 이용해 정석적으로 해결하였다.
핵심 원리는 리스트인 arr에 있다. 빈 arr에 dfs를 수행하면 입력받은 M의 크기와 arr의 길이가 같아질 때까지 append가 일어난다. 그 뒤 M의 크기와 arr의 길이가 같아지면 arr을 출력하고 pop을 한 뒤 다음 인덱스로 넘어간다. 즉 밑의 이미지처럼 맨 왼쪽 끝까지 탐색 후 한 단계 퇴각 후 다음 원소를 끝까지 탐색하는 형태이다.
import sys input = sys.stdin.readline # N과 M을 입력받음 N, M = map(int, input().split()) arr=[] def dfs(): # 만약 arr의 길이가 M과 같아지면 arr을 한줄로 출력 if len(arr)==M: print(' '.join(map(str, arr))) return # 만약 arr의 길이가 M과 같지 않으면 arr에 i를 추가하고 dfs 수행 # dfs가 종료되면, 즉 arr의 길이가 M이 되어 멈추고 나면 pop을 수행 # pop을 수행함으로써 다음에 출력해야할 숫자로 넘어감(dfs) else: for i in range(1, N+1): arr.append(i) dfs() arr.pop() dfs()