0422 기초수학 3일차(~30)

박영선·2023년 4월 23일
0

순열

순열 : 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)))
profile
데이터분석 공부 시작했습니다

0개의 댓글