중복순열 구하기
1부터 N까지 번호가 적힌 구슬이 있습니다. 이 중 중복을 허락하여 M번을 뽑아 일렬로 나열
하는 방법을 모두 출력합니다.
▣ 입력설명
첫 번째 줄에 자연수 N(3<=N<=10)과 M(2<=M<=N) 이 주어집니다.
▣ 출력설명
첫 번째 줄에 결과를 출력합니다. 맨 마지막 총 경우의 수를 출력합니다.
출력순서는 사전순으로 오름차순으로 출력합니다.
▣ 입력예제 1
3 2
▣ 출력예제 1
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
9
문제풀이
import sys
sys.stdin=open("input.txt", "r")
def DFS(L):
global cnt
if L==m:
for i in range(m):
print(res[i], end=' ')
print()
cnt+=1
else:
for i in range(1, n+1):
res[L]=i
DFS(L+1)
if __name__=="__main__":
n, m=map(int, input().split())
res=[0]*n
cnt=0
DFS(0)
print(cnt)
해설
숙지사항
▶ 스텍 상단에 있는 함수가 항상 작동한다고 생각하자
▶ 일단 함수 안에 있는 재귀 함수가 호출되면 아랫줄 코드를 처리 하지 않고, 그 재귀함수를 먼저 처러한다.
'파이썬 알고리즘 > 완전탐색과 DFS기초' 카테고리의 다른 글
8.순열구하기 (0) | 2022.11.08 |
---|---|
7.동전교환 (0) | 2022.11.07 |
5. 바둑이 승차 - Cut Edge Tech (0) | 2022.11.07 |
4.합이 같은 부분집합 (0) | 2022.11.06 |
3.부분집합 구하기(DFS) (0) | 2022.11.06 |