[알고리즘] 조합 구하기 (DFS)
조합 구하기 (DFS)
1부터 N까지 번호가 적힌 구슬이 있습니다.
이 중 M개를 뽑는 방법의 수를 출력하는 프로그램을 작성하세요.
입력설명
첫 번째 줄에 자연수 N(3<=N<=10)과 M(2<=M<=N) 이 주어집니다.
출력설명
첫 번째 줄에 결과를 출력합니다.
맨 마지막 총 경우의 수를 출력합니다.
출력순서는 사전순으로 오름차순으로 출력합니다.
테스트케이스
입력예제 | 출력예제 |
---|---|
4 2 | 1 2 1 3 1 4 2 3 2 4 3 4 6 |
3 2 | 1 2 1 3 2 3 3 |
5 3 | 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 10 |
해결방법
1~n 까지의 부분집합을 구하여 append()한 리스트의 크기가 x의 깊이가 n+1까지 도착했을 경우 len이 m 인 것을 찾는다!
그림 그려주고 도와주신 사람 Github : Su100 프론트엔드
알려주셔서 감사합니다!! 😎👍👍
※ 팁 : 각 함수를 하나의 node로 봐야한다. 이전에는 1개라던지 2개라던지 헷갈렸는데, 각 함수는 다른 인스턴스 느낌이여서 각각 다른 node로 생각하는 것이 좋다! faet.Su100
코드
def dfs(x):
global count
if x == n+1:
if len(ch) == m:
count = count + 1
print(*ch)
return
else:
ch.append(x)
dfs(x+1)
ch.pop()
dfs(x+1)
n, m = map(int, input().split())
count = 0
ch = []
dfs(1)
print(count)
댓글남기기