https://school.programmers.co.kr/learn/courses/30/lessons/43165?language=python3
def combination(arr, r):
for i in arr:
if r == 1:
yield [arr[i]]
else:
for next in combination(arr[i+1:], r-1):
#중복을 허용하지 않으니까 다음꺼부터
yield [arr[i]] + next
def complex_combination(arr, r):
for i in arr:
if r == 1:
yield [arr[i]]
else:
for next in complex_combination(arr[i:], r-1):
#중복을 허용하기 때문에 자기 자신부터
yield [arr[i]] + next
def product(arr, r):
for i in arr:
if r == 1:
yield [arr[i]]
else:
for next in product(arr, r-1):
#중복을 허용하고 순서도 중요하니까 그 자체로 넣기
yield [arr[i]] + next
int main():
for i in pruduct([0, 1], 5):
print(i)
#출력
#[0,0,0,0,0]
#[1,0,0,0,0]
#[0,1,0,0,0]..
#[1,1,0,0,0] ..
#[1,1,1,1,1] .. 이런 식
for i in complex_combination([0, 1], 5):
print(i)
#출력
#[0,0,0,0,0]
#[1,0,0,0,0]
#[1,1,0,0,0]
#...
#[1,1,1,1,1]
for i in combination([0, 1, 2, 4, 5], 2):
print(i)
#[0, 1]
#[1, 2]
#...
#[0, 5]
#[4, 5]