반응형
Notice
Recent Posts
Recent Comments
Link
Brise
Python 순열, 조합 구현하기 본문
반응형
파이썬은 itertools 패키지를 통하여 순열과 조합 기능을 제공한다.
itertools를 이용한 순열과 조합 사용 방법은 아래와 같다.
from itertools import combinations, permutations
arr = [1,2,3,4]
print(list(combination(arr, 2)))
print(list(permutations(arr,2)))
하지만 내장된 순열과 조합 기능을 사용할 수 없는 경우(i.e. 코딩 테스트)도 있기 때문에
직접 순열과 조합 기능을 구현하여 사용할 줄 알아야 한다.
직접 구현하는 경우 성는 자체를 올리는 것보다 발상을 이해하여 추후 다시 사용할 수 있도록 간편하는 것이 중요하다고 생각하여 아래와 같이 구현하였다.
아마도 성능 자체는 높지 않으나, 기억하기는 쉬울 것 같다.
def combination(arr, n):
result = []
if n == 0:
return [[]]
if n == 1:
result = [[i] for i in arr]
return result
for i in range(len(arr)):
elem = arr[i]
c = combination(arr[i+1:], n-1)
for rest in c:
result.append([elem]+rest)
return result
def permutation(arr, n):
result = []
if n == 0:
return [[]]
if n == 1:
result = [[i] for i in arr]
return result
for i in range(len(arr)):
elem = arr[i]
p = permutation(arr[:i]+arr[i+1:], n-1)
for rest in p:
result.append([elem]+rest)
return result
data = [1, 2, 3, 4]
print(permutation(data, 2))
print(combination(data, 2))
각각에 대해서 자신을 제외한 서브 행렬에 대하여 값을 더하면 순열과 조합이 나오는 것이다.
추가로 조합의 경우에는 순회 할 때 자신 앞의 데이터를 선택하면 중복이므로 고려하지 않는 것이 특징으로
위의 두 함수는 실제 구현 상 1줄 (arr[:i]) 만이 차이나게 된다.
반응형
'프로그램 > Python' 카테고리의 다른 글
cupy, numba (0) | 2023.03.28 |
---|---|
[프로그래머스 문제풀이] 큰수 만들기 (0) | 2022.05.14 |
[백준 문제풀이] 12100번 2048(Easy) (0) | 2022.05.02 |
[백준 문제풀이] 15685번 드래곤 커브 (0) | 2022.04.24 |
[프로그래머스 문제풀이] 정수 삼각형 (0) | 2022.04.21 |
[프로그래머스 문제풀이] N으로 표현 (0) | 2022.04.21 |
[프로그래머스 문제풀이] 가장 먼 노드 (0) | 2022.04.19 |
Comments