순열과 조합을 재귀함수를 통해 구현하는 방법과 라이브러리를 통해 구현하는 방법으로 나누어서 설명해보겠습니다.
1. 순열(Permutation)
서로 다른 개의 원소에서 개를 중복없이 순서에 상관있게 선택하는 혹은 나열하는 것을 순열(permutation)이라고 한다.
1-1. 재귀함수
# 개수가 5개인 리스트 [1, 2, 3, 4, 5] 주어졌을 때 중복없이 순서있게 3개를 뽑아보자.
# 순열 사용.
# 주어진 숫자들
nums = [1, 2, 3, 4, 5]
# 3개를 뽑는다.
r = 3
# 순열을 만드는 테이블
ans = []
# 중복을 확인할 리스트
visited = [False] * (max(nums)+1)
def print_args():
print(" ".join(map(str, ans)))
# 재귀함수를 통한 구현
def Permutation(cnt):
if cnt == r:
print_args()
return
for i in nums:
if visited[i] == True:
continue
ans.append(i)
visited[i] = True
Permutation(cnt+1)
ans.pop()
visited[i] = False
return
# Permutaion안에 들어가는 숫자는 n개 뽑혔다는것을 의미한다.
# 아래 코드는 0개의 숫자가 뽑혔다는 것을 뜻한다.
Permutation(0)
1-2. 라이브러리 사용
# 개수가 5개인 리스트 [1, 2, 3, 4, 5] 주어졌을 때 중복없이 순서있게 3개를 뽑아보자.
# 순열 사용.
# 라이브러리를 사용하기 위해 itertools를 import
from itertools import permutations
# 주어진 숫자들
nums = [1, 2, 3, 4, 5]
# 3개를 뽑는다.
r = 3
# permutations(숫자들, 뽑고 싶은 개수)
for args in permutations(nums, r):
for i in args:
print(i, end= " ")
print()
'Dev Lang > Python' 카테고리의 다른 글
[Python] reverse, reversed (0) | 2023.05.21 |
---|---|
[Python] 알고리즘 풀이를 위해서 시간을 측정하는 법 (0) | 2022.08.30 |
[Python] 중복되는 데이터를 제거하고 싶을 경우 (0) | 2022.07.18 |
[Python] 넘파이 numpy (0) | 2022.03.02 |
[Python]Collections.Counter와 반올림 처리 (0) | 2022.02.21 |