순열과 조합

이동근·2021년 4월 23일
0

python

목록 보기
18/18

순열 조합 쉽게 만들기

결론부터 말하면 직접 조합을 구현하는 것 보다 python 라이브러리 'itertools'를 사용해 구하는 방법이 10배 정도 빨랐다.

permutation(순열)

permutation(반복가능한객체, r)

반복 가능한 객체(=길이가 n인)에 대해서 중복을 허용하지 않고 'r'를 뽑아서 나열한다.
뽑힌 순서대로 나열하기 때문에 순서에 의미가 있다. (즉, 같은 값이 뽑히더라도 순서가 다르면 경우의 수로 취급한다.)

결과


중복을 허용하지 않고 뽑아낸다.

combinations(조합)

combinations(반복가능한 객체, r)

  • 반복 가능한 객체(길이가 = n인)에 대해서 중복을 허용하지 않고 r개를 뽑는다.
  • 어떤 것을 뽑는지를 보는 것이기 때문에 뽑은 순서는 고려하지 않는다.

결과


중복을 허용하지 않은 채로 결과값을 내보낸다.

product(중복 순열)

4개의 product를 사용해 보았다.

  • 첫번째는 리스트와 문자열의 조합
  • range(3)개를 3번 조합했을 때의 경우
  • 리스트와 튜플의 요소 수를 2개
  • 리스트와 튜플의 요소 수를 3개

결과

  • 첫 번째의 결과
    -> list1 [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b'), (4, 'a'), (4, 'b')]

  • 두 번째 결과
    -> list2 [(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 1, 0), (0, 1, 1), (0, 1, 2), (0, 2, 0), (0, 2, 1), (0, 2, 2), (1, 0, 0), (1, 0, 1), (1, 0, 2), (1, 1, 0), (1, 1, 1), (1, 1, 2), (1, 2, 0), (1, 2, 1), (1, 2, 2), (2, 0, 0), (2, 0, 1), (2, 0, 2), (2, 1, 0), (2, 1, 1), (2, 1, 2), (2, 2, 0), (2, 2, 1), (2, 2, 2)]

  • 세 번째 결과
    -> list3 [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

  • 네 번째 결과
    ->list4 [(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 1), (1, 3, 2), (1, 3, 3), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 1), (3, 3, 2), (3, 3, 3)]

이런식으로 어떻게 조합하느냐에 따라서 수를 조합해서 출력 해 준다.

combination with replacement(중복조합)

combination_with_replacement(반복 가능한 객체, r)

이런 방법을 사용하면 더욱 쉽게 각 조합을 구할 수 있다.

그리고 math의 squrt

profile
하루하루 1cm 자라는 개발자

0개의 댓글