Algorithm/백준

[Python] 15657 N과 M (8)

내영잉 2023. 1. 20. 16:21

1. 문제 📚

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

 

15657번: N과 M (8)

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

www.acmicpc.net

2. 입출력 예 📋

3. 알고리즘 ✅

문제 조건 중 비내림차순이 있었기때문에

고른 수열은 비내림차순이어야 한다.
길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.


1. 정렬을 해주었고

2. dfs 파라미터로 그 이전 값을 받아, 그 이전 값보다 큰 값들만 append 시켜주었다

4. 소스코드 💻

import sys

input = sys.stdin.readline

N, M = map(int, input().strip().split())
arr = sorted(list(map(int, input().strip().split())))
output = []

def dfs(before, count):
    if len(output) == M:
        print(' '.join(output))
        return

    for i in range(N):
    	# 조건3
        if arr[before] > arr[i]:
            continue

        output.append(str(arr[i]))
        dfs(i, count + 1)
        output.pop()

dfs(0, 0)