순열
순열 : n개에서 r개를 택하여 나열하는 경우 / 나열 순서가 다르면 다른 경우다.
순열의 갯수 공식 : nPr = n(n-1)(n-2)...(n-r+1)
ex) 1,2,3,4 중 3개 택하여 나열한다.
4P3 = 432 = 24
순열은 팩토리얼을 이용해서 나타낼수도 있다.
n! / (n-r)!
ex) 4! / (4-3)! = 123*4 / 1 = 24
#8P3 / 7P5
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: ')) #n개에서 r개 뽑기
result = 1
for n in range(numN,(numN-numR),-1):
print('n : {}'.format(n))
result = result * n
print('result : {}'.format(result))
원순열 : 시작과 끝의 구분이 없는 순열
ex) {1,2,3} 은
{1,2,3} {1,3,2}
{2,1,3} {2,3,1}
{3,1,2} {3,2,1} 6개의 경우의 수 인데, 이걸 원형으로 배열한다고 생각하면
{1,2,3} {2,3,1} {3,1,2} 가 계속 이어지는 순열이나 다름이 없다.
따라서 6개의 경우의 수가 아닌, 2개의 원순열이 된다.
공식은 n!/n 혹은 (n-1)! 로 계산할 수 있다.
조합
조합 : 순서 상관없이 r 개 선택
ex) {1,2,3,4} 중 3개 선택하기
nCr = (nPr / r!) = (n! / r!(n-r)!)
4C3 = 4P3 / 3! = 432 / 123 = 4
= 1234 / 1231 = 4
순열 사용해서 조합 구하기
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: ')) #n개에서 r개 뽑기
resultP = 1 #순열결과
resultR = 1
resultC = 1
for n in range(numN,(numN-numR),-1):
print('n : {}'.format(n))
resultP = resultP * n
print('resultP : {}'.format(resultP))
for n in range(numR, 0, -1):
print('n : {}'.format(n))
resultR = resultR * n
print('resultR : {}'.format(resultR))
resultC = int(resultP/resultR)
print('resultC : {}'.format(resultC))
팩토리얼 사용
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: ')) #n개에서 r개 뽑기
resultP = 1 #순열결과
resultR = 1
resultC = 1
for n in range(numN, 0, -1):
print('n : {}'.format(n))
resultP = resultP * n
for n in range(numR, 0, -1):
print('n : {}'.format(n))
resultR = resultR * n
for n in range(numN-numR, 0, -1):
print('n : {}'.format(n))
resultC = resultC * n
resultT = resultP/(resultR*resultC)
print('resultT : {}'.format(int(resultT)))
확률
확률 : 특정사건이 일어날 수 있는 수
모든 사건: 표본공간 / 특정 사건: 사건
확률과 조합 : 조합을 이용해서 확률을 알아낼 수 있다.
#7장 중 3장 뽑는 전체사건 (꽝4개 당첨3개)
#꽝2장, 선물1장 뽑는 확률 (꽝4개 중 2개 / 당첨 3개 중 1개)
def proFun():
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN,(numN-numR),-1):
resultP = resultP * n
for n in range(numR, 0, -1):
resultR = resultR * n
resultC = int(resultP/resultR)
print('sample : {}'.format(resultC))
return resultC
sample = proFun() #함수호출
print('sample : {}'.format(sample))
event1 = proFun()
print('event1 : {}'.format(event1))
event2 = proFun()
print('event1 : {}'.format(event2))
probability = (event1+event2)/sample
print('probability : {}%'.format(round(probability*100,2)))