Lesson 14 of 20
순열 — 순서가 있는 뽑기
줄 세우기, 그리고 팩토리얼의 폭발
학생 5명 중 3명을 뽑아 1등 · 2등 · 3등을 정합니다. 몇 가지일까요?
곱의 법칙을 씁니다. 1등은 5명 중 아무나(5가지), 2등은 남은 4명 중(4가지),
3등은 남은 3명 중(3가지). 5 × 4 × 3 = 60가지.
이렇게 순서를 따져서 뽑는 것을 순열(permutation)이라 하고
P(n, r) 또는 ₙPᵣ 라고 씁니다.
P(n, r) = n × (n−1) × … × (n−r+1) = n! / (n−r)!
여기서 n!(n 팩토리얼)은 1 × 2 × … × n 입니다.
0! = 1로 약속해요 — "아무것도 안 고르는 방법도 한 가지"라는 뜻입니다.
itertools.permutations 가 순열을 전부 만들어 줍니다.
Python
Runs in your browser
🎮 직접 줄을 세워 보세요
사람 수와 뽑을 수를 바꿔 보세요. 순서를 바꾼 것이 왜 다른 경우인지 목록으로 확인할 수 있습니다. 원형으로 둘러앉는 경우도 함께 세어 줘요.
n!은 2ⁿ보다도 훨씬 빠르게 폭발합니다.
Python
Runs in your browser
같은 것이 있는 순열
MISSISSIPPI 의 글자를 배열하는 방법은 몇 가지일까요?
11글자니까 11!… 이 아닙니다. 같은 글자끼리는 바꿔도 구별이 안 되니까요.
S가 4개, I가 4개, P가 2개 있으므로 중복된 만큼 나눠 줍니다.
11! / (4! × 4! × 2! × 1!) = 34,650
"같은 것을 구별하지 않는다"는 아이디어는 다음 강의 조합의 핵심이기도 합니다.
set() 으로 중복을 없애 세어 보면 공식과 같습니다.
Python
Runs in your browser
회전해서 겹치는 것끼리 묶으면 정확히 n으로 나눠집니다.
Python
Runs in your browser
🤔 Check yourself
7명 중 3명을 뽑아 회장 · 부회장 · 총무를 정하는 방법은?
Answer 직책이 다르므로 순서를 따집니다 —
P(7,3) = 7 × 6 × 5 = 210가지. 35는 직책 없이 3명만 뽑는 조합 C(7,3)이고, 343은 7³(중복을 허락한 경우)입니다.🤔 Check yourself
"AABB" 의 글자를 배열하는 서로 다른 방법의 수는?
Answer
4! / (2! × 2!) = 24 / 4 = 6가지입니다 (AABB, ABAB, ABBA, BAAB, BABA, BBAA). 같은 글자끼리 자리를 바꿔도 구별되지 않으므로 중복된 만큼 나눠 줘야 해요.🤔 Check yourself
6명이 원탁에 둘러앉는 방법의 수는?
Answer
(6−1)! = 5! = 120가지입니다. 720(=6!)은 일렬로 세울 때의 수예요. 원탁에서는 모두 한 칸씩 옮겨 앉아도 같은 배치라서 6으로 나눕니다.