문제해결(PS)/백준(BOJ)

백준 15663 N과 M (9)

곰탱이장 2024. 12. 25. 18:15

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

 

 이 문제는 N과 M이 주어지고 N개의 자연수 중 M개를 고른 수열을 중복없이 사전순으로 출력하는 문제이다. 이 문제에서 주어지는 N개의 자연수는 중복될 수 있으므로, 필자는 그냥 고를 수 있는 모든 경우의 수열을 구하고 집합 자료형과 sorted() 함수를 이용하여 간단하게 구했다. 처음엔 시간초과가 나오지 않을까 했지만 N이 8 이하로 많이 해봤자 수열이 8! 밖에 나오지 않는지라, 그렇게 구하였다.

 

def DFS(seq,visited):
    if len(seq) == M:
        ans_set.add(tuple(seq))
        return
    
    for i in range(len(Ns)):
        if not visited[i]:
            visited[i] = True
            DFS(seq+[Ns[i]],visited)
            visited[i] = False



N,M = map(int,input().split())
Ns = list(map(int,input().split()))

ans_set = set()

DFS([],[False for _ in range(N)])

for i in sorted(list(ans_set)):
    print(' '.join(str(a) for a in i))

'문제해결(PS) > 백준(BOJ)' 카테고리의 다른 글

백준 16953 A → B  (0) 2024.12.26
백준 15666 N과 M (12)  (0) 2024.12.25
백준 11725 트리의 부모 찾기  (0) 2024.12.25
백준 11053 가장 긴 증가하는 부분 수열  (0) 2024.12.25
백준 15654 N과 M (5)  (0) 2024.12.22