본문 바로가기

알고리즘 삽질장

[인프런] 조합 구하기

반응형


문제설명

1부터 N까지 번호가 적힌 구슬이 있다. 이 중 M개를 뽑는 방법의 수를 출력해라.

입력조건

  • 첫 줄에 자연수 N(3 <= N <= 10)과 M(2 <= M <= N)이 주어진다.

출력조건

  • 첫 줄에 결과를 출력한다. 맨 마지막 총 경우의 수를 출력한다.
  • 출력순서는 사전순으로 오름차순으로 출력한다.

사고과정

  • 조합을 구하는 경우는 순열을 구할 때 상태트리랑 다르게 만들어야 한다. 
  • 즉 for loop 문에서 구현하는 방법이 다르다.

풀이

n, m = map(int, input().split())
res = [0] * m
cnt = 0

def dfs(L, S):
    global cnt
    # 종단
    if L == m:
        for r in res:
            print(r, end=' ')
        print()
        cnt += 1
        return
    else:
        for i in range(S, n+1):
            res[L] = i
            dfs(L+1, i+1)

dfs(L=0, S=1)  # L은 res의 인덱스(레벨), S는 가지 위의 값!
print(cnt)
반응형

'알고리즘 삽질장' 카테고리의 다른 글

[인프런] 경로 탐색  (0) 2021.11.24
[인프런] 수들의 조합  (0) 2021.11.24
[인프런] 수열 추측하기  (0) 2021.11.23
[인프런] 순열 구하기  (0) 2021.11.23
[인프런] 동전교환  (0) 2021.11.23