Leta Learns

[Python] 백준 15664번 - N과 M (10) 본문

Coding/백준

[Python] 백준 15664번 - N과 M (10)

leta 2022. 2. 26. 19:10

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

 

15664번: N과 M (10)

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

www.acmicpc.net

n과 m (9) 에서 고른 수열이 비내림차순이어야 한다는 조건만 추가로 고려해주면 되는 문제이다.

 

시작하는 부분을 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 not visited[i] and same != num[i]:
            if i >= s:
                visited[i] = 1
                ans.append(num[i])
                same = num[i]
                dfs(i)
                ans.pop()
                visited[i] = 0

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

Comments