[알고리즘 맛보기 with Python] 순열, 조합

띵슈롱·2023년 8월 19일

알고리즘 맛보기

목록 보기
2/7

목차

  1. 순열
  2. 중복 순열
  3. 조합
  4. 중복 조합

순열(permutation)

n개 중 r개를 선택하여 순서대로 정렬
eg) 1,2,3에서 2개를 선택 -> (1,2), (2,3), (3,1)
순서를 고려하기 때문에 (1,2) 와 (2,1)은 다른 것

공식: nPr = n! / (n-r)!

itertools 순열

from itertools import permutations
arr = [1,2,3,4]
for i in permutations(arr, 2):
	print(i)

permutation(list 이름, 몇개씩 뽑을건지)
해당 코드를 실행하면
(1,2), (1,3), (1,4),
(2,1), (2,3), (2,4),
(3,1), (3,2), (3,4),
(4,1), (4,2), (4,3)
튜플 형식으로 반환한다.

itertools 중복 순열

product(리스트 이름, repeat = 추출 개수)

조합

서로 다른 n개에서 r개를 선택할 때 순서를 고려하지 않고, 중복 없이 뽑는 것
순서를 고려하지 않기 때문에 (1,2)와 (2,1)은 동일하다

공식: nCr = n! / r!(n-r)!

itertools 조합

from itertools import combinations
arr= [1,2,3,4]
for i in combinations(arr,2):
	print(i)

combinations(list 이름, 몇개씩 뽑을건지)
해당 코드를 실행하면
(1,2), (1,3), (1,4)
(2,3), (2,4)
(3,4)
튜플 형식으로 반환한다.

from itertools import combinations

arr = [1, 2, 3]
result = []
for i in range(len(arr)+1):
  result = result+list(combinations(arr,i))

print(result)

이 코드를 실행했을때 결과가
[(), (1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)] 이렇게 나오는데
단일 요소일때 ,가 찍히는 이유는 튜플로 반환되기 때문이다.
파이썬에서 튜플은 ,로 정의되기 때문에, 하나의 요소만 있는 튜플을 만들 때는 요소 뒤에 쉼표를 붙여야 한다고 한다. 그렇지 않으면 단순한 값으로 해석한다고 한다.

단일 요소에 대해 ,를 없애고 싶으면 리스트안에 값을 튜플이 아닌 다른 데이터 타입으로 바꾸면 된다.

중복조합

combinations_with_replacement(리스트, 몇개 씩 뽑을건지)

참고 사이트

https://yangnyang.tistory.com/14

profile
'나' 라는 변수

1개의 댓글

comment-user-thumbnail
2023년 8월 19일

많은 것을 배웠습니다, 감사합니다.

답글 달기