미래의 나를 위한 메모/코딩테스트

[230125] 백준 15649번 - N과 M (1) (Python)

Choi Jaekuk 2023. 1. 25. 13:38

https://github.com/cjk09083/Code

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

 

15649번: N과 M (1)

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

www.acmicpc.net

 

해답 1)


'''
- DFS를 사용해 전개 
- 192ms
'''
import sys
input = sys.stdin.readline

def dfs(depth, val):
    global visit
    if depth ==  m:
        print(*val, sep = " ")
        return
    else:
        for i in range(1,n+1):
            if visit[i] == 0:
                new_val = val.copy()
                new_val.append(i)
                visit[i] = 1
                dfs(depth+1, new_val)
                visit[i] = 0

    return

if __name__ == "__main__": 
    n, m = map(int, input().split())
    result = []
    arr = list(range(1,n+1))
    visit = [0] * (n+1)
    # print(arr)
    for i in range(1,n+1):
        val = [i]
        depth = 0
        left = n
        visit[i] = 1
        dfs(depth+1, val)
        visit[i] = 0