Home N과 M (5) 백준 15654번 백트래킹
Post
Cancel

N과 M (5) 백준 15654번 백트래킹

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

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

N개의 자연수 중에서 M개를 고른 수열


앞에서는 1부터 N까지의 자연수였다면 이번에는 수열을 줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
n,m = map(int,input().split())
num_list = list(map(int,input().split()))
num_list.sort()
arr = [0]*m
isused = [False]*(max(num_list)+1)
def func(k):
    if k==m:
        for i in range(m):
            print(arr[i], end=' ')
        print()
        return
    for j in num_list:
        if not isused[j]:
            arr[k]=j
            isused[j] = True
            func(k+1)
            isused[j] = False
func(0)

수열을 받고 오름차순으로 정렬을 해줍니다. 그리고 for문에서 리스트를 사용하면 리스트의 순서대로 들어갑니다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.