combinations을 이용한 풀이
N과 M (2)에서 주어진 숫자를 가지고 한다는 점만 다른 사실상 동일한 문제.
# 입력
import sys
from itertools import combinations
n,m = map(int, sys.stdin.readline().split())
arr = sorted(list(map(int, sys.stdin.readline().split())))
# 처리
for ans in combinations(arr, m):
print(*list(ans))
backtracking을 이용한 풀이
백준 15649 - N과 M (1)와 비슷하면서도 중복을 허용하지 않기 때문에 가지치기에 고려할게 늘었다. backtrack() 재귀 함수에서 매개변수로 (현재숫자의 index) + 1을 전달해주면 오름차순으로 쉽게 해결할 수 있다.
# 입력
import sys
n,m = map(int, sys.stdin.readline().split())
arr = sorted(list(map(int, sys.stdin.readline().split())))
ans = []
# 처리
def backtrack(start=0):
if len(ans) == m:
print(*list(map(str, ans)))
return
for i in arr[start:]:
if i not in ans:
ans.append(i)
backtrack(arr.index(i)+1)
ans.pop() # return이 실행되면 여기로 돌아옴. (전 단계로 돌아감 = backtrack)
backtrack()