본문 바로가기
알고리즘/백트래킹

[백준-실버3] 15655번 N과 M(6) (파이썬, 백트래킹, DFS)

by 호리미 2022. 2. 6.

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

 

15655번: N과 M (6)

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

www.acmicpc.net

 

<복습 체크>

22/03.05                  
O                  

<내 코드>

- 이번문제도 5번처럼 특정 숫자가 주어져있으므로 리스트 nums에 담는다.

- 이번에는 숫자간의 중복 ( 1 1 , 2 2)가 허용되지 않음 -> if num not in stack: 조건 필요

- 또한 순열이 아니라 조합으로 구성 (1 2 <--> 2 1 중 1 2 만 허용)

  --> dfs에 start 파라미터 이용하여 중복 방지

n, m = map(int, input().split())
nums = list(map(int, input().split()))

nums.sort()
stack = []

def dfs(start):
    if len(stack)==m:
        print(*stack)
        return
    
    for i in range(start, n):
        if nums[i] not in stack:
            stack.append(nums[i])
            dfs(i)
            stack.pop()