Leta Learns

[Python] 백준 15666번 - N과 M (12) 본문

Coding/백준

[Python] 백준 15666번 - N과 M (12)

leta 2022. 2. 26. 20:01

문제 https://www.acmicpc.net/problem/15666

 

15666번: N과 M (12)

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해

www.acmicpc.net

 

n과 m 처음부터 풀었으면 쉽게 풀 수 있는 문제였다.

(10), (11) 코드 적당히 합쳐서 만들면 된다.

 

(11) 코드에 고른 수열이 비내림차순이어야 한다는 조건만 추가해주면 되므로,

시작점을 나타내는 변수 s를 사용하여 현재 값 i 가 시작값인 s 보다 크거나 같은 경우를 골라주면 된다.

 

import sys
input = sys.stdin.readline

def dfs(s): #s: start
    if len(ans) == m:
        print(*ans)
        return
    
    same = 0
    for i in range(n):
        if same != num[i]:
            if i >= s:
                ans.append(num[i])
                same = num[i]
                dfs(i)
                ans.pop()

n, m = map(int, input().split())
num = list(map(int, input().split()))
num.sort()
ans = []
dfs(0)

Comments