hgk0404
hgk0404.tistory
hgk0404

공지사항

전체 방문자
오늘
어제
  • 전체 카테고리 N
    • [컴퓨터비전] N
    • [Computer Science]
      • [컴퓨터네트워크]
      • [알고리즘]
      • [자료구조 in C]
      • [C & C++]
      • [이산수학]
      • [Math]
    • [머신러닝]
      • [Numpy, Pandas]
    • [Cloud]
      • [AWS]
      • [NCP]
      • [Kubernetes]
      • [Terraform]
    • [Dev]
      • [가상환경]
      • [Linux]
      • [Docker]
    • [Python]
    • [Coding Test]
      • [백준]
      • [프로그래머스]
      • [SQL]
    • [WEB]
    • [자격증, 일상]
    • [엑셀]
    • [금융]

인기 글

최근 글

최근 댓글

250x250
hELLO · Designed By 정상우.
hgk0404

hgk0404.tistory

[Python] 순열, 조합, 중복순열
[Python]

[Python] 순열, 조합, 중복순열

2022. 7. 24. 07:19
728x90

순열: 순서를 고려함.

[ "AB", "AC", "BA", "BC", "CA", "CB" ] # 순서 다르면 (AB != BA) 다른 경우

조합: 순서를 고려하지 않음.

[ "AB", "AC", "BC" ] # 순서 고려 X (AB = BA)

중복순열: 순서를 고려하지만, 중복 가능

[ "AA", "AB", "AC", "BA", "BB", "BC", "CA", "CB", "CC" ] # 순서 고려 + 중복 허용

 

 

1. 순열

 

 

몇 개를 골라 순서를 고려해 나열한 경우의 수를 의미합니다. 

 

 

서로 다른 n개에서 r개를 꺼내서 순서를 정해 나열하는 가짓수입니다. 영어로는 permutation이라고 하며 nPr이라고 표시합니다.

 

 

 

 

파이썬에서 순열을 사용하기 위해서는 라이브러리 추가를 해주어야 합니다.

 

 

from itertools import permutations

 

 

알파벳 4개가 들어간 리스트 arr에서 2개를 순서를 고려하여 뽑는 경우 

 

 

from itertools import permutations
arr = [ 'A', 'B', 'C', 'D' ]
nPr = permutations(arr, 2)
print(list(nPr))

 

 

결과)

[('A', 'B'), ('A', 'C'), ('A', 'D'), 
('B', 'A'), ('B', 'C'), ('B', 'D'), 
('C', 'A'), ('C', 'B'), ('C', 'D'), 
('D', 'A'), ('D', 'B'), ('D', 'C')]

 

 

('A', 'B')와 ('B', 'A')는 순서를 고려하기 떄문에 서로 다른 경우입니다.

 

 

반복문에도 응용할 수 있습니다.

 

 

from itertools import permutations
arr = [ 'A', 'B', 'C', 'D' ]
for x, y in permutations(arr, 2):
    print((x, y))

 

 

결과)

('A', 'B')
('A', 'C')
('A', 'D')
('B', 'A')
('B', 'C')
('B', 'D')
('C', 'A')
('C', 'B')
('C', 'D')
('D', 'A')
('D', 'B')
('D', 'C')

 

 

반복문으로 arr에서 2개씩 뽑아 순열로 가짓수를 표현했습니다.

  • 반복문에 permutations(arr)라고 쓰면 숫자 매개변수를 넣지 않기 때문에 len(arr)로 인식되어 4개의 조합을 보여줍니다.

 

 

2. 조합

 

 

몇개를 골라 순서를 고려하지 않고 나열한 경우의 수를 의미합니다.

서로 다른 n개 중에서 r개를 취하여 조를 만들때 이 하나하나의 조를 n개 중에서 r개 취한 조합이라고 합니다.

영어로 combination이라고 하며 nCr이라고 표현합니다.

 

 

 

 

파이썬으로 조합을 사용하기 위해서는 라이브러리를 추가해 주어야 합니다.

from itertools import combinations

 

 

알파벳 4개가 들어간 배열에서 순서를 고려하지 않고 2개를 뽑는 경우

from itertools import combinations
arr = [ 'A', 'B', 'C', 'D' ]
nCr = combinations(arr, 2)
print(list(nCr))

 

 

결과)

[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]

 

 

('A', 'B')와 ('B', 'A')는 순서를 고려하기 떄문에 서로 같은 경우입니다. 그래서 중복되지 않고 한번만 출력됩니다.

 

 

조합도 마찬가지로 반복문에 응용할 수 있습니다.

from itertools import combinations
arr = [ 'A', 'B', 'C', 'D' ]
for x, y in combinations(arr, 2):
    print((x, y))

 

 

결과)

('A', 'B')
('A', 'C')
('A', 'D')
('B', 'C')
('B', 'D')
('C', 'D')

 

 

반복문으로 순서를 고려하지 않고 arr의 원소 2개를 뽑아 표현했습니다.

 

 

3. 데카르트 곱

 

 

두 개 이상 리스트의 모든 조합을 보여줍니다.

 

 

from itertools import product

arr = [ 'ABC', '123', '!@#' ]

tmp = list(product(*arr))
print(tmp)

 

 

결과)

[('A', '1', '!'), ('A', '1', '@'), ('A', '1', '#'), ('A', '2', '!'), ('A', '2', '@'), 
('A', '2', '#'), ('A', '3', '!'), ('A', '3', '@'), ('A', '3', '#'), ('B', '1', '!'), 
('B', '1', '@'), ('B', '1', '#'), ('B', '2', '!'), ('B', '2', '@'), ('B', '2', '#'), 
('B', '3', '!'), ('B', '3', '@'), ('B', '3', '#'), ('C', '1', '!'), ('C', '1', '@'), 
('C', '1', '#'), ('C', '2', '!'), ('C', '2', '@'), ('C', '2', '#'), ('C', '3', '!'), 
('C', '3', '@'), ('C', '3', '#')]

 

 

arr에 있는 리스트 하나하나 모든 조합을 보여줍니다.

 

 

순서대로 'ABC'의 A와 '123'의 1 '!@#'의 !를 조합한 A1!이 가장 먼저 나오고 그 다음으로 A1@이 나오면서 C3#을 마지막으로 모든 조합을 보여줍니다.

 

 

728x90
저작자표시 동일조건

'[Python]' 카테고리의 다른 글

[Python] 파이썬 remove(), pop(), del 차이점  (0) 2022.07.27
[Python] 파이썬 heap 자료구조, heapq 모듈 사용  (0) 2022.07.25
[Python] f-string을 이용한 문자열 포메팅  (0) 2022.07.22
[Python] 문자열 루프, enumerate함수  (0) 2022.07.19
[Python] .reverse()함수와 reversed()함수의 차이  (0) 2022.07.18
'[Python]' 카테고리의 다른 글
  • [Python] 파이썬 remove(), pop(), del 차이점
  • [Python] 파이썬 heap 자료구조, heapq 모듈 사용
  • [Python] f-string을 이용한 문자열 포메팅
  • [Python] 문자열 루프, enumerate함수
hgk0404
hgk0404
공부기록

티스토리툴바