Algorithm/DFS, BFS, 백트래킹
섹션 6. 순열 구하기
brother_stone
2022. 10. 17. 19:25

DFS를 이용한 풀이
def dfs(l):
global cnt
if l == m:
print(*res)
cnt += 1
return
for i in range(1, n + 1):
#내 처음 코드. in연산자를 쓰기 때문에 체크리스트를 쓰는 게 더 효율적임.
# if i in res:
# continue
# res[l] = i
# dfs(l + 1)
# res[l] = 0
#중복순열이 아니기에 res에 중복된 요소가 들어가는 걸 방지하기 위해 체크리스트 사용
#다음 레벨에서 고를 수 있는 수는 부모레벨에서 선택한 값 제외 모두 가능
if ch[i] == 0:
ch[i] = 1
res[l] = i
dfs(l + 1)
ch[i] = 0
n, m = map(int, input().split())
res = [0] * m
ch = [0] * (n + 1)
cnt = 0
dfs(0)
print(cnt)
라이브러리를 이용한 풀이
from itertools import permutations
n, m = map(int, input().split())
seq = [i for i in range(1, n+1)]
cnt=0
for v in permutations(seq, m):
cnt+=1
print(*v)
print(cnt)
피드백
라이브러리를 이용하는게 훨씬 편하지만 테스트에서 사용을 금지할 수도 있기 때문에 DFS로 구하는 방법은 무조건 익혀두고 가자.