조합은 기본적으로 중복되지 않도록 원하는 만큼을 뽑는 경우입니다.
이 이상으로 조합이 가지는 의미를 파악한다면 이를 코드로 작성하는 것은 쉬운 일입니다.
예제를 통해서 시야를 넓혀봅시다.
Sequence = [1,2,3,4] 에서 2개를 뽑는데 1을 뽑고난 뒤에는 2,3,4 세 가지 중에서 하나를 뽑을 수 있습니다.
그림으로 나타내면 아래와 같습니다.
리스트 [1, ?] 를 현재 리스트라고 하면 전체 수열에서 현재 리스트에 1을 담은 상태에서 2,3,4 만 바뀌고 있습니다.
이를 코드로 나타낸다면 2가지 방법이 있는데
1. 인덱스를 이용해서 값을 바꿉니다.
2. 기존 값을 빼고 새로운 값을 넣습니다.
이 중에서 조합을 구하는 데 사용되는 방법은 두 번째 입니다.
이 방법을 일반적으로 적용하면 조합을 구현할 수 있습니다. 핵심이 되는 부분만 살펴보고
나머지는 아래 깃허브 코드를 보고 확인하시면 됩니다.
주요 부분은 append 와 recursive, pop을 이용하는데,
2,3,4 를 순서대로 넣어준 것처럼 for 문을 사용한다는 점 입니다.
1
2
3
4
5
6
7
8
9
|
def comb(sequence, start, total, index, curr, result):
if index == 0:
result.append(curr[:]
return
for i in range(start, total):
curr.append(sequence[i]
comb(sequence, i+1, total, index-1, curr, result)
curr.pop()
|
<-- PUSH |
전체 코드는 아래 깃허브에서 확인할 수 있습니다. [사람들이 PYTHON Alogrithm을 구현해놓은 github 입니다. ]
https://github.com/fxnnxc/Python/blob/master/backtracking/all_combinations.py
'프로그래밍' 카테고리의 다른 글
[백준 1904 파이썬] 01타일 (0) | 2020.02.23 |
---|---|
[Python][Algorithm] Find Index Before Sorted (0) | 2020.01.27 |
[Python] Operator overloading (0) | 2020.01.23 |
[Python] Efficiency 1 - String Concatenatio (0) | 2020.01.20 |
Template C++ (함수) (0) | 2019.12.18 |