스터디노트_기초수학_3

MR.HAN·2023년 10월 19일

스터디노트

목록 보기
4/9

1. 팩토리얼 : 1부터 양의 정수 n까지의 정수를 모두 곱한 것

0! = 1로 약속

ex. n!를 출력하는 프로그램

for in 반복문

inputN = int(input('n 입력 : '))

result = 1 # 곱하는 거는 1
for n in range(1, (inputN + 1)):
    result *= n

print(f'{inputN} 팩토리얼 : {result}')

while 반복문

inputN = int(input('n 입력 : '))

result = 1
n = 1

while n <= inputN:
    result *= n
    n += 1

print(f'{inputN} 팩토리얼 : {result}')

재귀함수

inputN = int(input('n 입력 : '))

def factorialFun(n):

    if n == 1:
        return 1

    return n * factorialFun(n - 1)

print(f'{inputN} 팩토리얼 : {factorialFun(inputN)}')

math 모듈

import math

inputN = int(input('n 입력 : '))

result = math.factorial(inputN)

print(f'{inputN} 팩토리얼 : {result}')



2. 군수열 : 여러 개의 항을 묶었을 때 규칙성을 가지는 수열

(1), (1, 2), (1, 2, 3), (1, 2, 3, 4) ...
항의 개수 an = a1 + (n - 1) d, sn = n (a1 + an) / 2
-> an = n, sn = (n ** 2 + n) / 2

ex. 군 수열의 n번째 항의 값을 출력하는 프로그램
(1), (1, 2), (1, 2, 3), (1, 2, 3, 4) ...

inputN = int(input('n항 입력 : ')) # 몇 번째 항

flag = True
n = 1 # 군
nCnt = 1 # 전체 항
searchN = 0 # 찾는 항의 값

while flag:

    for i in range(1, (n + 1)):
        if i == n:
            print('{}'.format(i), end='')
        else:
            print('{},'.format(i), end='')

        nCnt += 1 # 전체 몇 번째 항

        if nCnt > inputN:
            searchN = i
            flag = False
            break

    print()
    n += 1 # 군의 반복

print('{}항 : {}'.format(inputN, searchN))



순열 : n개에서 r개를 택하여 나열(순서 있게 뽑는)하는 경우의 수

nPr = n (n - 1) (n - 2) ... (n - r + 1) (단, 0 < r <= n)
nPr = n! / (n - r)!
원 순열 : 시작과 끝의 구분이 없는 순열 an = (n - 1)!

ex. 순열의 값을 구하는 프로그램

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}')



조합 : n개에서 r개를 택(순서 없이)하는 경우의 수

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

ex. 조합의 값을 구하는 프로그램

numN = int(input('numN 입력 : '))
numR = int(input('numR 입력 : '))
resultP = 1
resultR = 1
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):
    print('n : {}'.format(n))
    resultR *= n

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

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



확률 : 모든 사건(표본)에서 특정 사건(사건)이 일어날 수 있는 수를 나타낸 것

박스에 전체 종이 n장
박스에 꽝이 적힌 종이가 n1장 있고, 선물이 적힌 종이가 n2장 있을 때,
꽝 r1장과 선물 r2장을 뽑을 확률을 출력 (단, n = n1 + n2)

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(f'resultP : {resultP}')

    for n in range(numR, 0, -1):
        resultR *= n
    print(f'resultR : {resultR}')

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

    return resultC

sample = proFun()
print(f'sample : {sample}')

event1 = proFun()
print(f'event1 : {event1}')

event2 = proFun()
print(f'event2 : {event2}')

probability = (event1 * event2) / sample
print(f'probability : {round(probability * 100, 2)}%')

0개의 댓글