순열과 조합을 구할 땐 itertools 모듈의 combinations / permutations도 사용할 수 있지만, 재귀로 풀 수도 있습니다.
백준 문제 4가지를 통해 방법을 소개해 보겠습니다.

N, M = map(int, input().split())
picked = [False] * (N + 1) # 각 숫자를 골랐는지 여부 저장
curr = [] # 순열의 원소를 담은 배열
picked 정의pick[n] -> True: n이 선택됨pick[n] -> False: n이 선택되지 않음False로 초기화curr 정의# 순열의 i번째 숫자 고르기
def pick(i):
# 모든 숫자를 다 고름
if i > M:
for c in curr:
print(c, end=" ")
print()
else:
# 순열에 추가할 숫자를 반복문으로 순회
for k in range(1, N + 1):
if not picked[k]: # 순열에 없는 숫자인 경우
picked[k] = True # 순열에 추가하기
curr.append(k)
pick(i + 1) # 다음 숫자를 뽑기
curr.pop() # 이후 순열에서 빼기
picked[k] = False
pick(1)
pick(i) 정의: 순열의 i번째 원소를 선택하는 함수pick(1)부터 호출pick() 내부에선 for문을 통해 부터 까지의 수 k를 하나씩 순열에 추가하려고 시도picked[k]가 참일 때)의 경우 선택 불가능k를 추가할 때, picked 배열의 해당 인덱스 값을 True로 바꿔 주고, curr 배열에 k를 추가pick(i + 1)을 호출하여, 다음 숫자를 선택하기curr.pop()으로 curr 배열에서 k를 빼고, picked 배열의 해당 인덱스 값을 False로 바꿔야 함curr을 출력
N, M = map(int, input().split())
curr = []
curr 정의picked는 굳이 필요없음: 그 이유는 이후 코드에 설명def pick(i, begin):
# 모든 숫자를 다 고름
if i > M:
for c in curr:
print(c, end=" ")
print()
else:
# 조합에 추가할 수를 반복문으로 순회
for k in range(begin, N + 1):
curr.append(k) # 조합에 추가하기
pick(i + 1, k + 1) # 다음 수 뽑기: k + 1부터만 뽑을 수 있음
curr.pop() # 이후 조합에서 빼기
pick(1, 1)
pick(i, begin) 정의: 조합 i번째 원소를 선택하는 함수begin 이상의 수만 고를 수 있음 (본 문제에선 조합 내 수를 오름차순으로 나열해야 함)pick(1, 1)부터 호출pick() 내부에선 for문을 통해 begin부터 까지의 수 k를 하나씩 조합에 추가하려고 시도k를 추가할 때, curr 배열에 k를 추가pick(i + 1, k + 1)을 호출하여, 다음 수를 선택하기k 미만의 수를 뽑을 수 없음k를 뽑을 수 없음 (이거 때문에 순열에 썼던 picked는 여기선 필요 없음)begin 매개변수는 k+1로 설정curr.pop()으로 curr 배열에서 k를 빼야 함curr을 출력
N, M = map(int, input().split())
curr = []
def pick(i):
if i > M:
for c in curr:
print(c, end=" ")
print()
else:
# 이미 같은 수가 선택됐는지 확인하지 않아도 됨
for j in range(1, N + 1):
curr.append(j)
pick(i + 1)
curr.pop()
pick(1)
picked 배열은 필요없음
N, M = map(int, input().split())
curr = []
def pick(i, begin):
if i > M:
for c in curr:
print(c, end=" ")
print()
else:
for k in range(begin, N + 1):
curr.append(k)
pick(i + 1, k) # 동일 값을 허용: k+1가 아닌 k부터 뽑기 허용
curr.pop()
pick(1, 1)
begin 자리에 올 값을 k + 1(이번에 뽑은 수 다음 수)에서 k(이번에 뽑은 수)로 수정이렇게 풀지 마시고 itertools.permuations, itertools.collections 쓰세요....
ㅠㅠㅠㅠㅠ