📊알고리즘, 문제풀이/📈문제풀이 (PS)

[알고리즘][Python] 백준 15666 N과 M (12) 문제 풀이

Written by Donghak Park

문제 출처 : www.acmicpc.net/problem/15666

 

15666번: N과 M (12)

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

www.acmicpc.net


문제 해석 : N개의 자연수 중에서 M개를 선택하여 수열을 생성한다. 이때 N에는 중복된 수가 들어 있을 수 있으며 수열은 서로 중복되서는 안되고, 수열 속에서 같은 수가 중복 되어도 된다. 

 

문제 풀이 : 재귀적으로 답을 만들어가고 이미 출력된 적이 있다면 이를 제외 해주면 된다.


풀이 코드

def make_answer(start, count, arr2):
    global candidate

    if count >= M:
        if arr2 not in candidate:
            temp = []
            for element in arr2:
                print(element, end = " ")
                temp.append(element)
            print()
            candidate.append(temp)
            return
        else:
            return

    for i in range(start, N):
        arr2.append(arr[i])
        make_answer(i, count+1, arr2)
        arr2.remove(arr[i])

N, M = map(int, input().split())
arr = list(map(int, input().split()))
arr.sort()
candidate = []
make_answer(0, 0, [])

author : donghak park
contact : donghark03@naver.com

## 문제의 저작권은 백준 알고리즘 사이트에 있습니다. 혹시 문제가 되는 부분이 있으면 연락 바랍니다.