파이썬

[Python] 순열, 조합 구현하기

굴잉 2024. 6. 16. 21:03
728x90

💡 순열 (Permutation)

  • n개 중에서 r개를 뽑아 순서대로 나열하는 경우의 수
  • nPr = n! / (n-r)!

 

구현방법

  • DFS
  • 체크리스트-공유된 자원 이용

 

코드

def perm(n, r):
    answer = []

    def gen(choose, checklist):
        if len(choose) == r:
            answer.append(choose.copy())
            return

        for i in range(len(n)):
            if checklist[i] == 0:
                choose.append(n[i])
                checklist[i] = 1
                gen(choose, checklist)
                choose.pop()
                checklist[i] = 0

    gen([], [0] * len(n))

    return answer


result = perm([1, 2, 3], 2)
print(result)

 

 

💡 조합 (Combination)

  • n개 중에 순서 상관없이 r개를 고르는 모든 경우의 수
  • nCr = nPr / 2!

 

구현 방법

  • DFS
  • 트리를 트래버스할 때 다음 시작점을 가지고 간다.

코드

def combination(n, r):
    answer = []

    def generate(choose, begin):
        if len(choose) == r:
            answer.append(choose.copy())
            return

        for i in range(begin, len(n)):
            choose.append(n[i])
            generate(choose, i + 1)
            choose.pop()

    generate([], 0)
    return answer

result = combination([1, 2, 3, 4, 5], 2)
print(result)

 


 

🔗 참고 자료

728x90