조합, 중복조합, 중복순열(yield 사용)

jeongwon yun·2022년 10월 16일
0

Algorithm

목록 보기
14/18

조합

def combi(arr, r):
    for i in range(len(arr)):
        if r == 1:
            yield [arr[i]]
        else:
            for next in combi(arr[i + 1:], r - 1):
                yield [arr[i]] + next
print(list(combi([1, 2, 3, 4], 2)))
# => [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

중복조합

def combi2(arr, r):
    for i in range(len(arr)):
        if r == 1:
            yield [arr[i]]
        else:
            for next in combi2(arr[i:], r - 1):
                yield [arr[i]] + next
print(list(combi2([1, 2, 3, 4], 2)))
# => [[1, 1], [1, 2], [1, 3], [1, 4], [2, 2], [2, 3], [2, 4], [3, 3], [3, 4], [4, 4]]

중복순열

def perm2(arr, r):
    for i in range(len(arr)):
        if r == 1:
            yield [arr[i]]
        else:
            for next in perm2(arr, r - 1):
                yield [arr[i]] + next
print(list(perm2([1, 2, 3, 4], 2)))
# => [[1, 1], [1, 2], [1, 3], [1, 4], [2, 1], [2, 2], [2, 3], [2, 4], [3, 1], [3, 2], [3, 3], [3, 4], [4, 1], [4, 2], [4, 3], [4, 4]]

0개의 댓글