🔑 알고리즘/백준 Python

백준15649번 파이썬 N과M #12-1) 백트래킹

Tamii 2020. 10. 19. 20:01
반응형

내 풀이

def back (d,n,m):
    if d==m:
        print(*ans)
        return
    for i in range(n):
        if not visit[i]:
            visit[i]=True
            ans.append(i+1)

            back(d+1,n,m)

            ans.pop()
            visit[i]=False
            

n,m=map(int,input().split())
visit=[False]*n
ans=[]
back(0,n,m)

정신없는 나만 알아볼 것 같은 풀이...

 

 

다른 풀이 (라이브러리 사용한 경우)

from itertools import permutations

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

l = list(range(1, n + 1))

res = (list(permutations(l, m)))

for i in range(len(res)):
    print(' '.join(map(str, res[i])))

 

permutations ( 리스트, 원소 개수)

 

 ex) 2개의 원소 개수 묶음으로 나누어라 

  num=[1,2,3,4]

  permutations(num,2)

    ->  [(1,2), (1,3),(1,4), (2,1), (2,3), (2,4) (3,1), (3,2), (3,4), (4,1), (4,2), (4,3)]