백준/문제풀이_python

15655 N과M(6) _python

휴대용치즈 2022. 10. 17. 03:49

https://www.acmicpc.net/problem/15655

 

15655번: N과 M (6)

N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열

www.acmicpc.net

12개의 비슷한 문제가 있는 문제 (1)~(12)

 

 

문제 접근

백트래킹

문제를 읽어보면 끝자리를 계속 바꿔나가니 스택으로 접근하기 가장 알맞아보인다.

스택으로 접근하는데 모든경우를 탐색한다는 것은 dfs를 사용하면 쉽게 풀린다.

 

 

 

코드

import sys
input = sys.stdin.readline

"""
1. 2번째로 받은 input인 arr 정렬하기
2. dfs사용
"""

N, M = map(int,input().split())
arr = list(map(int,input().split()))
arr.sort()
ans = []

def dfs(x):
    if len(ans)==M:
        print(*ans)
        return
    for i in range(x,N):
        if arr[i] not in ans:
            ans.append(arr[i])
            dfs(i)
            ans.pop()

dfs(0)