Algorithm/백준

[백준] 15650 n과 m 2

sunnyshiny 2023. 3. 15. 20:00
728x90

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

 

15650번: N과 M (2)

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

www.acmicpc.net

 

python, permutaion 모듈 활용한 코드

from  itertools import permutations

n,m = map(int, input().split())
perm = permutations(range(1,n+1), m)
s = list()
for p in perm:
    p = list(p)
    p.sort()
    if p in s:
        continue
    print(' '.join(map(str, p)))
    s.append(p)

dfs 알고리즘을 활용한 코드

n, m = map(int, input().split())
back =[]

def dfs(start):
    if len(back) == m:
        print(' '.join(map(str, back)))
        return

    for i in range(start, n+1):
        if i not in back:
            back.append(i)
            dfs(i+1)
            back.pop()

dfs(1)

15649 n과 m 1문제와 다르게 permutation을 활용한 코드는 dfs보다 메모리만 더 차지 하였고 시간을 단축하지는 못했다.(동일한 시간)

728x90