본문 바로가기
Study/Algorithm

[Algorithm] 조합을 구현해보자

by ngool 2024. 8. 18.

이번 포스트는 파이썬에서 조합을 구현하는 방식에 대해 이야기해보려 합니다.
 
크게 두 가지 방식으로 구현해보겠습니다.
1. 중첩 반복문
2. 재귀


중첩 반복문으로 5C3 구현하기

'ABCDE' 문자열 요소들에 대해 for를 활용하여 5C3을 구현해보겠습니다.

arr = 'ABCDE'
N, R = len(arr), 3          # 5C3 = 10

for i in range(N - 2):              # 첫 번째 요소 선택
    for j in range(i + 1, N - 1):   # 두 번째 요소 선택
        for k in range(j + 1, N):   # 세 번째 요소 선택
            print(arr[i], arr[j], arr[k])

 

처음 보면 코드가 좀 난해할 수 있습니다.

그렇다면 그림으로 이해해봅시다.

 

이제 패턴이 좀 보이지 않나요~?


재귀로 5C3 구현하기

arr = 'ABCDE'
N, R = len(arr), 3
pick = [0] * R    # 선택한 R개 저장

def comb(k, s):   # s: 반복의 시작
    if k == R:
        print(pick)
    else:
        remain = R - (k + 1)
        for i in range(s, N - remain):
            pick[k] = arr[i]
            comb(k + 1, i + 1)

comb(0, 0)

 

여기서 핵심은 remain 변수를 통해 반복의 구간을 잘 설정해주는 것입니다.

'Study > Algorithm' 카테고리의 다른 글

[Algorithm] 다익스트라(Dijkstra) 알고리즘  (1) 2024.11.12
[Algorithm] 진법 변환  (0) 2024.08.31
[Algorithm] 순열을 구현해보자  (0) 2024.08.18