간단한 순열을 푸는 문제다.
왠지 순열문제는 기분이 나쁘다... ㅋㅋㅋㅋㅋㅋㅋ
중복되지 않는 순열이기에 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)))
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 15651. N과 M (3) - 중복순열 (0) | 2021.03.20 |
---|---|
[백준 알고리즘] 15650. N과 M (2) - 조합 (0) | 2021.03.20 |
[백준 알고리즘] 10026. 적록색약 - 파이썬, DFS (0) | 2021.03.08 |
[백준 알고리즘] 1012 유기농배추 _ 파이썬, dfs (0) | 2021.03.08 |
[백준 알고리즘] 1244. 스위치 켜고 끄기 - 파이썬 (0) | 2021.02.27 |