[알고리즘] 순열 구하기 (DFS)
(문제) 순열 구하기 (DFS)
1부터 N까지 번호가 적힌 구슬이 있습니다.
이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력합니다.
입력설명
첫 번째 줄에 자연수 N(3<=N<=10)과 M(2<=M<=N) 이 주어집니다.
출력설명
첫 번째 줄에 결과를 출력합니다.
맨 마지막 총 경우의 수를 출력합니다.
출력순서는 사전순으로 오름차순으로 출력합니다.
테스트케이스
입력예제 | 출력예제 |
---|---|
3 2 | 1 2 1 3 2 1 2 3 3 1 3 2 6 |
5 3 | 1 2 3 1 2 4 1 2 5 1 3 2 1 3 4 1 3 5 … 5 4 1 5 4 2 5 4 3 60 |
해결방법
해결방법 참고
dfs 중복 순열
순열이기 때문에 새로운 ch 라는 리스트를 생성하여 들릴 때마다 append()를 하고 나올 때는 pop()를 통해서 만약 깊이
즉, x가 m 개수 만큼 들어올 경우 spread operator를 이용하여 리스트 안에 있느 값을 띄운다.
그리고 동일한 것은 없어야하므로 만약 i가 ch라는 리스트에 이미 들어가 있으면 append()하지 않는다.
코드
def dfs(x):
global count
if x == m:
count = count + 1
print(*ch)
else:
for i in range(1, n+1):
if not i in ch:
ch.append(i)
dfs(x+1)
ch.pop()
n, m = map(int, input().split())
count = 0
ch = []
dfs(0)
print(count)
댓글남기기