백준 15654번 문제 바로가기

permutations을 이용한 풀이

‘1부터 n까지의 숫자’ 대신에 ‘n개의 숫자’가 주어진다는 점을 제외하면 N과 M (1)과 다를게 없다. ㅇ

# 입력
import sys
from itertools import permutations
n,m = map(int, sys.stdin.readline().split())
arr = sorted(list(map(int, sys.stdin.readline().split())))

# 처리
for ans in permutations(arr, m):
    print(*list(ans))

backtracking을 이용한 풀이

숫자가 주어진 다는 점만 고려해주면 금세 끝낼 수 있다.

# 입력
import sys
n,m = map(int, sys.stdin.readline().split())
arr = sorted(list(map(int, sys.stdin.readline().split())))
ans = []

# 처리
def backtrack():
    if len(ans) == m:
        print(*list(map(str, ans)))
        return
    for i in arr:
        if i not in ans:
            ans.append(i)
            backtrack()
            ans.pop() # return이 실행되면 여기로 돌아옴. (전 단계로 돌아감 = backtrack)

backtrack()