[제로베이스] 데이터 사이언스 15기 - (05-17 기초 수학 스터디노트)

윤태호·2023년 5월 17일
0
post-thumbnail

오늘 수강한 강의 - 기초 수학 (21 ~ 30)

21 피보나치 수열 ~ 26 순열

피보나치 수열

  • 세 번째 항은 두 번째 항과 첫 번째 항을 더한 합이다
  • a1= 1, a2= 1이고 n>2때 an = a(n-2) + a(n-1)

파이썬을 이용한 피보나치 수열

  • 피보나치 수를 계산하는 프로그램
inputN = int(input('n 입력: '))
valueN = 0
sumN = 0
valuePreN2 = 0
valuePreN1 = 0
n = 1
while n <= inputN:
    if n == 1 or n == 2:
        valueN = 1
        valuePreN2 = valueN
        valuePreN1 = valueN
        sumN += valueN
        n += 1
    else:
        valueN = valuePreN2 + valuePreN1
        valuePreN2 = valuePreN1
        valuePreN1 = valueN
        sumN += valueN
        n += 1
print('{}번째 항의 값: {}'.format(inputN, valueN))
print('{}번째 항까지의 합: {}'.format(inputN, sumN))

팩토리얼

  • 1부터 양의 정수 n까지의 정수를 모두 곱한 것

파이썬을 이용한 팩토리얼

  • 팩토리얼 결괏값을 출력하는 프로그램

반복문

inputN = int(input('n 입력: '))
result = 1
for n in range(1, inputN + 1):
    result *= n
print('{} 팩토리얼: {}'.format(inputN, result))

재귀 함수

def factorialFun(n):
    if n == 1:
        return 1
    return n * factorialFun(n - 1)
print('{} 팩토리얼: {}'.format(inputN, factorialFun(inputN)))

군수열

  • 여러 개의 항을 묶었을 때 규칙성을 가지는 수열

파이썬을 이용한 군수열

  • 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자
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개를 택하여 나열하는 경우의 수
  • 순서가 중요하다

순열과 팩토리얼

  • 순열은 팩토리얼(계승)을 이용해서 나타낼 수 있다

  • 예시)

파이썬을 이용한 순열

  • 파이썬을 이용하여 다음 순열들의 값을 구하는 프로그램을 만들어 보자
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
result = 1
for n in range(numN, (numN-numR), -1):
    print('n : {}'.format(n))
    result *= n
print('result: {}'.format(result))

원 순열

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

파이썬을 이용한 원 순열

  • 4명의 친구가 원탁 테이블에 앉을 수 있는 순서를 계산해보자
n = int(input('친구 수 입력: '))
result = 1
for i in range(1, n):
    result *= i
print('result: {}'.format(result))

27 조합 ~ 30 확률

조합

  • n개에서 r개를 택하는 경우의 수

파이썬을 이용한 조합

  • 파이썬을 이요하여 다음 조합들의 값을 구하는 프로그램을 만들어 보자
numN = int(input('numM 입력: '))
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))

확률

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

확률과 조합

  • 조합을 이용하여 확률을 알아낼 수 있다

파이썬을 이용한 확률

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):
        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('sample: {}'.format(event1))
event2 = proFun()
print('sample: {}'.format(event2))
probability = (event1 * event2) / sample
print('probability: {}%'.format(round(probability * 100, 2)))

총평

재미있었던 부분

조합 부분에서 순열 값을 이용하여 공식을 사용하는것이 가장 기억에 잘 남고 재미있었다

어려웠던 부분

확률부분을 파이썬을 이용할때 코드짜는 부분에서
sample과 event부분이 이해가 잘 가지 않았다

느낀점 및 내일 학습 계획

이해도 중요하지만 정 모르겠으면 그냥 외우는 것도 답이 될때가 있는 것 같다
내일부터는 다시 평일이니 마음 단단히 먹고 공부 시작해야겠다
내일은 기초수학 문제풀이를 할 예정이다

profile
데이터 부트캠프 참여중

0개의 댓글