Ch1 기초수학 18-30 (기초5-7)

김민지·2023년 3월 16일
0

Part 02. 수학

목록 보기
2/3
  1. 시그마
  • 시그마 : 수열의 합을 나타내는 기호
  • 몇 번째 항(k)부터 몇 번째 항(n)까지의 합인지 표시
  • k=1,2,3,..,n
  1. 계차 수열
  • 계차 수열 : 어떤 수열의 인접하는 두 항의 차로 이뤄진 또 다른 수열

    an = {0,3,8,15,24,35,48,63} -> 각 항의 차가 {bn}
    bn = {3,5,7,9,11,13,15} -> 등차수열
    -> {bn}은 {an}의 계차 수열

  • 계차 수열을 이용해서 수열의 일반항을 구할 수 있음

    b1 = a2 - a1
    b2 = a3 - a2
    b3 = a4 - a3
    b4 = a5 - a4
    b(n-1) = an - a(n-1)
    -> b1~b(n-1)의 합은 a1 + an과 같음
    -> bn을 이용해서 an을 구할 수 있음

  1. 피보나치 수열
  • 피보나치 수열 : 세 번째 항이 두 번째 항과 첫 번째 항을 더한 합인 수열

    a1 = 1, a2 = 1이고 n>2일때
    an = a(n-2) + a(n-1)

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

valueN = 0
sumN = 0

valuePreN2 = 0            #a(n-2)
valuePreN1 = 0            #a(n-1)

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. 팩토리얼
  • 팩토리얼 : 1부터 양의 정수 n까지의 정수를 모두 곱한 것

    0! = 1
    1! = 1
    2! = 1X2
    3! = 1X2X3

  • 재귀함수(자신을 다시 호출하는 함수)를 이용해 팩토리얼 구하기
def factorialFun(n):
    if n == 1:
        return 1

    return n * factorialFun(n-1)

print('{} 팩토리얼: {}'.format(inputN, factorialFun(inputN)))
  • 반복문 이용
inputN = int(input('n 입력: '))

result = 1
for n in range(1, inputN+1):
    result *= n

print('{} 팩토리얼: {}'.format(inputN, result))
  • math.factorial() 모듈 사용
import math
math.factorial(inputN)
  1. 군 수열
  • 여러 개의 항을 묶었을 때 규칙성을 가지는 수열

    1,1,2,1,2,3,1,2,3,4,1,2,3,4,5
    (1),(1,2),(1,2,3),(1,2,3,4),(1,2,3,4,5)
    -> 1군에 1개의 항, 2군에 2개의 항, 3군에 3개의 항,.. 존재
    -> 각 군은 첫째항 1, 공차 1의 등차수열

  • 특정 항의 값 구하기 : 각 군의 항 갯수의 규칙성을 찾고 일반항과 (항 갯수의 합)Sn을 구한 후, 구하고자 하는 항에 가깝게 구하기(몇 군의 몇 번째 항인지 구하기)
inputN = int(input('n항 입력: '))

flag = True
n = 1; nCnt = 1; searchN = 0          #nCnt: 전체에서 몇번째 항인지 세는 역할

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))
  • 군수열 반복문 좀 어렵다!!
  1. 순열(Permutation)
  • 순열 : n개에서 r개를 택하여 나열하는 경우의 수 (순서대로!)
  • nPr = n(n-1)(n-2)...(n-r+1)
  • nPr = n!/(n-r)!
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))

result = 1

for n in range(numN, (numN-numR), -1):      #(n-r+1)까지 곱해야 하기 때문에
    print('n: {}'.format(n))
    result *= n

print('result: {}'.format(result))
  • 원 순열 : 시작과 끝의 구분이 없는 순열
    -> n개를 원모양으로 배치하기
    -> n!/n or (n-1)!
for i in range(1, n):        #1부터 n-1까지 곱하기 -> (n-1)!
    result *= i
  1. 조합(Combination)
  • 조합 : n개에서 r개를 택하는 경우의 수 (순서 상관X)
  • nCr = nPr/r! = n!/(r!(n-r)!)
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('result: {}'.format(resultP))      # resultP : nPr의 결과값

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

resultC = int(resultP / resultR)         # nCr = nPr/r!
print('result: {}'.format(resultC))
  1. 확률
  • 확률 : '모든 사건(sample)'에서 '특정 사건(event)'이 일어날 수 있는 수를 나타낸 것
  • 조합을 이용해서 확률을 알아낼 수 있음
    -> (조합을 이용해 알아낸) 특정 경우의 수 / 모든 경우의 수 -> 알아내고자 하는 확률
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('event1: {}'.format(event1))

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

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

-> 조합을 구해주는 함수를 만들어서 세 번 쓰기

<제로베이스 데이터 취업 스쿨>

0개의 댓글