[11일차] 기초수학 7

하은·2023년 11월 2일
0

026. 순열(파이썬)

- 순열

- 파이썬을 이용해서 다음 순열들의 값을 구하는 프로그램을 만들어보자

8P3, 7P5
nPr = n(n-1)(n-2)..(n-r+1) = n!/(n-r)!

# 8P3
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))

result = 1 # 최종값을 변수로 만들어줌. 곱셈이니까 초기값 1

for n in range(numN, (numN-numR), -1):
    print('{}'.format(n))
    result *= n

print('result: {}'.format(result))

-->
numN 입력: 8
numR 입력: 3
8
7
6
result: 336


numN 입력: 7
numR 입력: 5
7
6
5
4
3
result: 2520개의 경우의 수

- 원순열

- 시작과 끝의 구분이 없는 순열

{1, 2, 3}

->
{1, 2, 3} = {2, 3, 1} = {3, 1, 2}
{1, 3, 2} = {2, 1, 3} = {3, 2, 1}
    3!
->  -    = 2
    3

공식: n!/n or (n-1)!

- 4명의 친구가 원탁 테이블에 앉을 수 있는 순서를 계산해보자

n = int(input('친구 수 입력: '))
result = 1
for i in range(1, n): #n+1이 아니라 n인 이유는 원순열이기 때문
    result *= i

print('result: {}'.format(result))

-->
친구 수 입력: 4
result: 6

027. 조합

- 조합이란?

- n개에서 r개를 택하는 경우의 수(순서x)

{1, 2, 3}


* 순열: 순서 상관있게 r개 선택
{1, 2}, {1, 3}, {2, 1}, {2, 3}, {3, 1}, {3, 2}
= 6가지 경우

* 조합: 순서 상관없이 r개 선택
{1, 2}, {1, 3}, {2, 3}
= 3가지 경우

- 4개에서 3개를 택하는 경우의 수

{1, 2, 3, 4}

      - 3 *
  - 2 - 4
      
      - 2 *
1 - 3 - 4

      - 2
  - 4 - 3
----------
      - 3 *
  - 1 - 4
      
      - 1 *
2 - 3 - 4

      - 1
  - 4 - 3
----------
      - 2 *
  - 1 - 4
      
      - 1 *
3 - 2 - 4

      - 1
  - 3 - 4
----------
      - 2
  - 1 - 3
      
      - 1
4 - 2 - 3

      - 1
  - 3 - 2

= 24
  --   = 4
  6(겹침)

- 순열과 조합

{1, 2, 3}
->
3P2 = 3 * 2 = 6
3C2 = 3P2 / 2! = 3

{1, 2, 3, 4}
->
4P3 = 4 * 3 * 2= 24
4C3 = 4P3 / 3! = 4

nCr = nPr     =     n! 
       -            -  
       r!     =  r! (n-r)!

실습) 다음 조합의 값을 구해보자

8C3 = 8 * 7 * (8-3+1 = 6) / 3 * 2 = 56

   8!         8 * 7 * 6 * 5 * 4 * 3 * 2
   -        =      ---------------
3!(8-3)!          3 * 2 * ( 5* 4* 3* 2)


7C5 = 7 * 6 * 5 * 4 * (7-5+1 = 3) / 5 * 4 * 3 * 2 = 21

   7!         7 * 6 * 5 * 4 * 3 * 2
   -        =   ---------------
5!(7-5)!       5 * 4 * 3 * 2 * (2)

실습) 카드 5장 중 2장을 선택했을 때 삼각형과 사각형이 동시에 선택될 수 있는 확률은?

5C2 = 5! / 2! (5-2)! = 5x4x3x2 / 2x 3x2 = 10개


028. 조합(파이썬)

- 파이썬을 이용해서 다음 조합들의 값을 구하는 프로그램을 만들어보자

8C3, 7C5

#조합: n*(n-1)*(n-2)*(n-r+1) / r!  =  n! / r!(n-r)!
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))

resultP = 1 #순열값
resultR = 1 #R! 값
resultC = 1 #조합값

for n in range(numN, (numN - numR), -1): #순열구하는중
    print('n: {}'.format(n))
    resultP *= n

print('resultP: {}'.format(resultP))

for n in range(numR, 0, -1): #r! 구하는중 #1까지니까 0으로
    print('n: {}'.format(n))
    resultR *= n

print('resultR: {}'.format(resultR))

resultC = int(resultP / resultR)
print('resultC: {}'.format(resultC))


-->
numN 입력: 7
numR 입력: 5
n: 7
n: 6
n: 5
n: 4
n: 3
resultP: 2520
n: 5
n: 4
n: 3
n: 2
n: 1
resultR: 120
resultC: 21

실습) 카드 5장 중 2장을 선택했을 때 삼각형과 사각형이 동시에 선택될 수 있는 확률은?

#5개중 2개 뽑을 때, 삼각형과 사각형이 동시에 선택될 확률? 딱 한가지
result = (1/resultC) * 100
print('{}%'.format(round(result, 2)))

-->
numN 입력: 5
numR 입력: 2
n: 5
n: 4
resultP: 20
n: 2
n: 1
resultR: 2
resultC: 10
10.0%

029. 확률

- 확률이란?

- 모든 사건에서 특정 사건이 일어날 수 있는 수를 나타낸 것

[동전]

  • 모든 사건: 앞, 뒤 -> 2가지 경우
  • 특정 사건: 앞 -> 1가지 경우, 뒤 -> 1가지 경우
  • 확률: 앞 -> 1/2, 뒤 -> 1/2

[주사위]

  • 모든 사건: 1, 2, 3, 4, 5, 6 -> 6가지 경우(표본)
  • 특정 사건: 1 -> 1가지 경우 ... 6 -> 1가지 경우
  • 확률: 1 -> 1/6, 2 -> 1/6, ... 6 -> 1/6

모든 사건 = 표본공간(sample)
특정 사건 = 사건(event)

- 확률과 조합

- 조합을 이용해서 확률을 알아낼 수 있다

[뽑기]
박스에 '꽝'이 적힌 종이가 4장 있고, '선물'이 적힌 종이가 3장 있다. 3장을 뽑을 경우 다음 경우의 수를 구해보자
= 순서 상관x. 7C3 = 7P3 / 3! = 35 = 전체

  • 꽝:0, 선물:3 -> 1/35
  • 꽝:1, 선물:2 -> (4C1 * 3C2) / 35 = 12/35
  • 꽝:2, 선물:1 -> (4C2 * 3C1) / 35 = 18/35
  • 꽝:3, 선물:0 -> (4C3) / 35 = 4/35

--
[뽑기]
박스에 '꽝'이 적힌 종이가 5장 있고, '선물'이 적힌 종이가 2장 있다. 3장을 뽑을 경우 다음 경우의 수를 구해보자
= 순서 상관x. 7C3 = 7P3 / 3! = 35 = 전체

  • 꽝:3, 선물:0 -> 5C3 / 35 = 10/35
  • 꽝:2, 선물:1 -> (5C2 * 2C1) / 35 = 20/35
  • 꽝:1, 선물:2 -> 5C1 / 35 = 5/35

030. 확률(파이썬)

- 박스에 '꽝'이 적힌 종이가 4장 있고, '선물'이 적힌 종이가 3장 있다. 파이썬을 이용해서 '꽝' 2장과 '선물' 1장을 뽑는 확률(%)을 출력하자

전체 = 7C3 = 35
꽝 2장 = 4C2 = 6
선물 1장 = 3C1 = 3

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 *= n
    print('resultP: {}'.format(resultP))

    for n in range(numR, 0, -1): #r!
        resultR *= n
    print('resultR: {}'.format(resultR))

    resultC = int(resultP / resultR)
    print('resultC: {}'.format(resultC))

    return resultC #함수 반환

sample = proFun()
print('sample: {}'.format(sample))

event1 = proFun()
print('event: {}'.format(sample))

event2 = proFun()
print('event: {}'.format(sample))


probability = (event1 * event2) / sample #확률값
print('probability: {}%'.format(round(probability * 100, 2)))

-->
numN 입력: 7
numR 입력: 3
resultP: 210
resultR: 6
resultC: 35
sample: 35
numN 입력: 4
numR 입력: 2
resultP: 12
resultR: 2
resultC: 6
event: 35
numN 입력: 3
numR 입력: 1
resultP: 3
resultR: 1
resultC: 3
event: 35
probability: 51.43%

0개의 댓글