본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 15664 N과 M (10)

by Alan_Kim 2023. 1. 5.
728x90
반응형

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

 

15664번: N과 M (10)

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

www.acmicpc.net

 

문제해결

문제 15663과 비슷한 문제

https://thought-process-ing.tistory.com/87

 

[python] 백준 15663 N과 M (9)

https://www.acmicpc.net/problem/15663 15663번: N과 M (9) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

thought-process-ing.tistory.com

바뀐 것은 출력값 각각이 오름차순 정렬로 되어있다는 것이다. 즉 [1, 7] 은 출력이 되지만 [7, 1]은 출력이 안 됨. 이 것이 15663과 다른점.

dfs를 돌릴때 출력 값을 뽑는 리스트에서 i번째 원소가 들어가면 i+1번째 원소부터 뽑을 수 있도록 dfs를 돌리면 된다.

 

CODE

import sys
input = sys.stdin.readline

n, m = map(int, input().split())
A = list(map(int, input().split()))
A.sort()
num = []
visited = [False]*n

def dfs(start):
    if len(num) == m:
        print(*num)
        return
    overlap = 0
    for i in range(start, n):
        if not visited[i] and overlap !=A[i]:
            visited[i] = True
            num.append(A[i])
            overlap = A[i]
            dfs(i+1)
            visited[i] = False
            num.pop()
        
dfs(0)
728x90
반응형

댓글