백준 15656번 문제 바로가기

product을 이용한 풀이

중복순열(product)에 대한 문제. 주어진 숫자를 이용해야한다는 조건 말고는 사실상 N과 M(3)과 동일하다.

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

# 처리
for ans in product(arr, repeat=m):
    print(*list(ans))

backtracking을 이용한 풀이

중복순열도 backtracking을 이용해서 풀어보자! 간단하게 N과 M(5) 풀이에서 for문만 지우면 된다ㅎㅎ

# 입력
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:
        ans.append(i)
        backtrack()
        ans.pop() # return이 실행되면 여기로 돌아옴. (전 단계로 돌아감 = backtrack)

backtrack()