알고리즘 문제 풀기/백준(Baekjoon)

[백준 알고리즘] 15649. N과 M (1) - 순열

hibscus 2021. 3. 20. 17:12

 

 

간단한 순열을 푸는 문제다.

 

왠지 순열문제는 기분이 나쁘다... ㅋㅋㅋㅋㅋㅋㅋ

 

 

 

중복되지 않는 순열이기에 visited로 중복검사가 필요하다.

 

만약 중복 순열이라면 visited를 빼면 된다.

 


N, M = map(int, input().split())

num = []
visited = [0 for _ in range(N)]

def perm(idx):
    if idx == M:
        print(" ".join(map(str, num)))
        return
    for i in range(N):
        if visited[i] == 0:
            num.append(i+1)
            visited[i] = 1
            perm(idx+1)
            num.pop()
            visited[i] = 0
perm(0)

 

 

 

이것보다 더 빠르고 간단하게 순열을 구하려면 itertools에서 permutations를 import해서 사용하면된다.

 

from itertools import permutations
N, M = map(int, input().split())
P = permutations(range(1, N+1), M) \

for i in P:
    print(' '.join(map(str, i)))