기초 수학(3)
◾순열
순열(nPr)
: 순서있게 n 개에서 r개를 선택하여 나열하는 경우의 수- nPr = n (n-1) (n-2) ... (n-r+1), (단, 0 < r <= n)
- 1 2 3 4 : 4P2
- 1 (2 / 3 / 4) : 3가지
- 2 (1 / 3 / 4) : 3가지
- 3 (1 / 2 / 4) : 3가지
- 4 (1 / 2 / 3) : 3가지
- 12가지 : 4 * 3 = 12
- 순열은 팩토리얼(계승)을 이용해서 나타낼 수 있다.
- nPr = n! / (n-r)!
# 입력 : n, r
# 출력 : nPr
# 반복 사용 : n! / (n-r)! = n!(n-1)!...(n-r+1)!
# 따라서 n ~ n-r+1의 범위만큼 반복을 통해 계산
result = 1
for n in range(numN, numN-numR, -1):
print('n : {}'.format(n))
result = result * n
# 재귀 사용
# n!, (n-r)!을 구한뒤 나누어 계산
def factorialFunc(n):
if n == 1 or n == 0 :
return 1
else :
return n * factorialFunc(n-1)
result = int(factorialFunc(numN) / factorialFunc(numN-numR))
원 순열
: 시작과 끝의 구분이 없는 순열(위치가 달라도 절대적인 순서가 같다면 같은 것으로 취급한다.)- 1 2 3
- (1 2 3), (1 3 2), (2 1 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)
- (1 2 3) == (2 3 1), (3 1 2)
- (1 3 2) == (2 1 3), (3 2 1)
- 원 순열 : n!/n = (n-1)!
# 입력 : n, r
# 출력 : 원 순열(n, r)
# 반복 사용 : 1 ~ n-1의 범위만큼 반복하며 계산
result = 1
for i in range(1, n):
result *= i
◾조합
조합(nCr)
: 순서에 상관없이 n개에서 r개를 택하는 경우의 수- nCr = nPr / r! = n!/(r! * (n-r)!)
- 1 2 3
- 1 (2 3) : 2가지
- 2 (3) : 1가지
- 3 ( ) : 0가지
- 3 가지 : 3! / (2! * 1!) = 3
# 입력 : n, r
# 출력 : nCr
resultP = 1 # nPr
resultR = 1 # r!
resultC = 1 # nPr / r!
# 반복 사용
for n in range(numN, numN-numR, -1):
resultP *= n
for n in range(numR, 0, -1):
resultR *= n
resultC = int(resultP / resultR)
◾확률
확률
: 모든 사건에서 특정 사건이 일어날 수 있는 수를 나타낸 것표본 공간
: 모든 사건사건
: 특정 사건- 동전 예시
- 표본 공간 : 앞, 뒤 2가지
- 특정 사건 : 앞-1가지, 뒤-1가지
- 확률 : 앞-1/2, 뒤-1/2
- 주사위
- 표본 공간 : 1, 2, 3, 4, 5, 6 6가지
- 특정 사건 : 1-1가지, 2-1가지, 3-1가지, ..., 6-1가지
- 확률 : 1-1/6, 2-1/6, 3-1/6, ..., 6-1/6
- 조합을 이용한 확률 계산
- 뽑기 : 꽝 4장, 선물 3장
- 3장을 뽑는 전체 경우의 수 : 7C3 = 7P3 / 3! = 35
- 3장을 뽑는 각 경우의 수의 확률
- 꽝 0, 선물 3 : 3C3 / 35 = 1 / 35
- 꽝 1, 선물 2 : (4C1 * 3C2) / 35 = 12 / 35
- 꽝 2, 선물 1 : (4C2 * 3C1) / 35 = 18 / 35
- 꽝 3, 선물 0 : 4C3 / 35 = 4 / 35
# 확률 실습
# 조합을 구하는 함수를 구현하여 활용
def comFunc():
numN = int(input('n 입력 : '))
numR = int(input('r 입력 : '))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN, numN-numR, -1):
#print('n : {}'.format(n))
resultP *= n
#print('resultP : {}'.format(int(resultP)))
for n in range(numR, 0, -1):
#print('n : {}'.format(n))
resultR *= n
#print('resultR : {}'.format(int(resultR)))
resultC = int(resultP / resultR)
#print('resultC : {}'.format(resultC))
return resultC
# 표본 공간
sample = comFunc()
print('sample : {}'.format(sample))
# 꽝을 뽑는 사건
event1 = comFunc()
print('event1 : {}'.format(event1))
# 선물을 뽑는 사건
event2 = comFunc()
print('event2 : {}'.format(event2))
# 해당 사건이 일어날 확률
probability = event1 * event2 / sample * 100
print('probability : {:.2f}%'.format(probability))
Author And Source
이 문제에 관하여(기초 수학(3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@skarb4788/기초-수학3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)