jaehhhk 2023. 1. 8. 18:44

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

 

15654번: N과 M (5)

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

www.acmicpc.net

 

백트레킹 개념을 이용하여 문제 풀이를 진행했다.

이때 결과값은 정렬된 상태로 출력해주어야 하므로, go 함수를 호출하기 전에 li를 정렬해준다.

M개를 추출을 해야하는 상황에서, arr의 길이가 M과 같아지는 경우(추출 수 충족) 출력 형식에 맞게 출력을 진행해준다.

만약 아직 조건을 충족시키지 못했다면, 아직 arr에 아무것도 없거나 1,1 과 같이 중복 추출이 일어나지 않는 경우

li의 인자를 하나씩 넣어서 go 함수의 재귀호출을 진행해 조건을 만족하는 경우 결과값을 출력한다.

input = __import__('sys').stdin.readline

def go(arr):
    if len(arr) == M:
        print(' '.join(map(str, arr)))
        return
    for i in range(N):
        if len(arr) == 0 or li[i] not in arr:
            arr.append(li[i])
            go(arr)
            arr.pop()

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

go([])