본문 바로가기
Algorithm/DFS, BFS, 백트래킹

섹션 6. 순열 구하기

by brother_stone 2022. 10. 17.


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로 구하는 방법은 무조건 익혀두고 가자.

 

'Algorithm > DFS, BFS, 백트래킹' 카테고리의 다른 글

[Java] 백준 15683 - 감시  (0) 2023.06.19
[Java]백준 1260 - DFS와 BFS  (0) 2023.04.20
섹션 7. 휴가  (0) 2022.10.19
섹션 6. 수열 추측하기  (0) 2022.10.17
이진트리 순회(DFS)  (0) 2022.10.08