순열 & 조합

jeongwon yun·2022년 10월 16일
0

Algorithm

목록 보기
10/18

순열

inputArr = [1, 2, 3, 4, 5]
n = len(inputArr)
visited = [False] * n  # 각 인덱스를 False로 초기화한다 ( 나중에 방문했다는 의미, True로 바꿀 것이다 )
m = 4  # 뽑고 싶은 수 ( 순서 상관한다 )

def perm(i, arr):
    if i == m:
        print(arr)
        return
    for j in range(n):
        if not visited[j]:  # 방문하지 않으면 배열에 넣고 방문처리하고 재귀 돌려준다, 그리고 원상복귀 해주기
            arr.append(inputArr[j])
            visited[j] = True
            perm(i + 1, arr)
            arr.pop()
            visited[j] = False

perm(0, [])

조합

inputArr = [1, 2, 3, 4, 5]
n = len(inputArr)
sol = []
r = 3  # 뽑고 싶은 수 ( 순서 상관 안한다 )

def combi(i, arr):
    if i == n:
        if len(arr) == r:
            print(arr)
        return
    arr.append(inputArr[i])
    combi(i + 1, arr)  # arr에 넣고 재귀
    arr.pop()
    combi(i + 1, arr)  # arr에 안넣고 재귀

combi(0, [])
print(sol)

0개의 댓글