Chapter 02. 기초수학 문제풀이
순열과 조합 (Python 수학 알고리즘 실습)
주요 개념
이번 학습에서는 경우의 수를 계산하는 기본 개념인
순열(Permutation) 과 조합(Combination) 을 Python 코드로 구현했다.
- 순열 : 서로 다른 n개 중 r개를 순서 있게 나열하는 경우의 수
→ 수식: nPr = n! / (n - r)! - 조합 : 서로 다른 n개 중 r개를 순서 상관없이 선택하는 경우의 수
→ 수식: nCr = n! / (r! × (n - r)!)
두 개념 모두 팩토리얼 연산을 기반으로 계산된다.
1. 순열 (Permutation)
💡 개념 정리
예를 들어 9개의 수 중 4개를 순서 있게 배열하는 경우의 수는
9P4 = 9 × 8 × 7 × 6 = 3024
즉, 앞에서부터 r개만 곱하는 구조다.
코드 예시
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
result = 1
for n in range(numN, (numN - numR), -1):
print(f'n: {n}')
result *= n
print(f'result: {result}')
실행 결과
numN 입력: 9
numR 입력: 4
n: 9
n: 8
n: 7
n: 6
result: 3024
range(numN, numN - numR, -1) 을 이용하면 뒤로 감소하며
필요한 항까지만 곱할 수 있다.
응용 예시 - 카드 순열 문제
“카드 7장을 나열할 때, 2·4·7번 카드가 반드시 이웃하도록 배치하는 경우의 수”
이 경우 2·4·7을 하나의 묶음(블록) 으로 보면,
총 5개의 블록을 나열하는 경우의 수 × 내부 3장의 순서 경우의 수로 계산된다.
즉, 5! × 3! = 720 × 6 = 4320가지
이처럼 순열 개념은 묶음형 배치 문제에도 자주 쓰인다.
2. 조합 (Combination)
💡 개념 정리
조합은 순서와 관계없이 선택하는 경우의 수이다.
예: 9개의 수 중 4개를 뽑는 경우
9C4 = 9! / (4! × 5!) = 126
코드 예시
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
resultP = 1 # n!
resultR = 1 # r!
resultC = 1
for n in range(numN, (numN - numR), -1):
resultP *= n
for n in range(numR, 0, -1):
resultR *= n
resultC = int(resultP / resultR)
print(f'resultC: {resultC}')
실행 결과
numN 입력: 9
numR 입력: 4
resultC: 126
순열 계산 후 r!로 나누면 조합의 결과가 된다.
카드 확률 문제 예시
카드 7장 중 3장을 선택했을 때, 3·4·5번이 동시에 선택될 확률은?
전체 경우의 수: 7C3 = 35
특정 조합(3·4·5)이 선택될 경우: 1
→ 확률 = (1 / 35) × 100 = 2.86%
Python으로 구현:
numN = 7
numR = 3
resultP = 1
resultR = 1
for n in range(numN, (numN - numR), -1):
resultP *= n
for n in range(numR, 0, -1):
resultR *= n
resultC = int(resultP / resultR)
prob = (1 / resultC) * 100
print(f'전체 조합 수: {resultC}')
print(f'특정 조합 확률: {round(prob, 2)}%')
실행 결과
전체 조합 수: 35
특정 조합 확률: 2.86%
* 이 글은 제로베이스 데이터사이언스 파트타임 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.
💡 생각 정리
이번 학습을 통해
- 순열 → 순서가 중요할 때,
- 조합 → 순서가 중요하지 않을 때
사용해야 함을 명확히 이해했다.
또한 range()의 감소 반복 구조, result *= n의 누적 곱, 그리고 팩토리얼 기반 수학식의 구현 흐름을 자연스럽게 익힐 수 있었다.
🚀 적용점
- 순열: 자리 배치, 암호 경우의 수, 조합형 UI 설계
- 조합: 확률 계산, 데이터 샘플링, 통계적 조합 문제
- 확률 문제 확장: (특정 조합 / 전체 조합) × 100 으로 실전 문제에 응용 가능
'데이터' 카테고리의 다른 글
| 제로베이스 데이터사이언스 스쿨 - Part 04. 기초 통계-2 (0) | 2025.11.09 |
|---|---|
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-21, Part 04. 기초 통계-1 (0) | 2025.11.08 |
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-19 (0) | 2025.11.07 |
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-18 (0) | 2025.11.05 |
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-17 (0) | 2025.11.04 |