Day24. 기초 수학 (5~6)

Junghwan Park·2023년 5월 10일
0

스터디노트

목록 보기
25/54

시그마

  • 수열의 합을 나타낸 기호 → ∑


    2 6 18 54 162 486 1458 4374
    3 3 3 3 3 3 3


    sn = {a1 + a2 + a3 + ... + an}


    n 끝
    => ∑ a1 * r^(k-1) 일반항 => 1부터 n항까지의 합을 구하자!
    k=1 시작
  • 실습1
    '시그마를 이용해서 나타낸 수열의 합을 파이썬 프로그램으로 만들어 보자.


    10
    ∑ 2 * k => {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
    k=1
등차 수열의 합 공식
an = a1 + (n-1)d
sn = n(a1 + an) / 2

inputN1 = int(input('a1 입력 : '))
inputD = int(input('공차 입력 : '))
inputN = int(input('n 입력 : '))

valueN = inputN1 + (inputN - 1) * inputD    # 일반항 구하기
sumN = inputN * (inputN1 + valueN) / 2

print('{}번째 항까지의 합 : {}'.format(inputN, int(sumN)))
  • 실습2
    '시그마를 이용해서 나타낸 수열의 합을 파이썬 프로그램으로 만들어 보자.


    8
    ∑ 2 * 3^(k-1) => {2, 6, 18, 54, 162, 486, 1458, 4374}
    k=1
# 등비 수열의 합 공식
# an = a1 + (n-1)d
# sn = a1 * (1 - r^n) / (1 - r)

inputN1 = int(input('a1 입력 : '))
inputR = int(input('공비 입력 : '))
inputN = int(input('n 입력 : '))

sumN = inputN1 * (1 - inputR ** inputN) / (1 - inputR)

print('{}번째 항까지의 합 : {}'.format(inputN, int(sumN)))

계차 수열

  • 두 항의차로 이루어진 또 다른 수열!
    어떤 수열의 인접하는 두항의 차로 이루어진 또 다른 수열


    {an} 0 3 8 15 24 35 48 63
    {bn} 3 5 7 9 11 13 15 ← 공차가 2인 등차 수열


    {bn}은 {an}의 계차 수열
  • 계차 수열을 이용해서 수열 an의 일반항을 구할 수 있다.


    {an} 0 3 8 15 24 35 48 63
    {bn} 3 5 7 9 11 13 15


    b1 = a2 - a1
    b2 = a3 - a2
    b3 = a4 - a3
    b4 = a5 - a4
    b5 = a6 - a5
    ...
    bn-1 = an - an-1


    n-1
    => ∑ bk = an - a1 => an = n^2 - 1
    k=1
  • 실습


    계차 수열을 이용해서 수열 an의 일반항을 구해보자.
    {an} = {3, 7, 13, 21, 31, 43, 57}
    {bn} = {4, 6, 8, 10, 12, 14}

직접해볼 것!


계차 수열(파이썬)

  • 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자.


    an = {3, 7, 13, 21, 31, 43, 57}
    4 6 8 10 12 14
inputAN1 = int(input('a1 입력 : '))
inputAN = int(input('an 입력 : '))    # n번째 항 입력

# inputBN1 = int(input('b1 입력 : '))
# inputBD = int(input('bn 공차 입력 : ')) # 공차 입력

valueAN = 0
valueBN = 0

n = 1
while n <= inputAN:

    if n == 1:
        valueAN = inputAN1
        valueBN = inputBN1
        print('an의 {}번째 항의 값 : {}'.format(n, valueAN))
        print('bn의 {}번째 항의 값 : {}'.format(n, valueBN))
        n += 1
        continue

    valueAN = valueAN + valueBN # valueBN 만큼 차이가 나므로
    valueBN = valueBN + inputBD
    print('an의 {}번째 항의 값 : {}'.format(n, valueAN))
    print('bn의 {}번째 항의 값 : {}'.format(n, valueBN))
    n += 1

print('an의 {}번째 항의 값 : {}'.format(inputAN, valueAN))
print('bn의 {}번째 항의 값 : {}'.format(n, valueBN))

[공식을 사용한 코딩]

# 공식을 사용한 코딩
# n^2 + n + 1 = an

valueAN = inputAN ** 2 + inputAN + 1
print('an의 {}번째 항의 값 : {}'.format(inputAN, valueAN))

피보나치 수열

  • an = an(n-2) + an(n-1)


    세 번째 항은 두 번째 항과 첫 번째 항을 더한 합이다.


    [1][1][2][3][5][8][13][21]


    a1 = 1, a2 = 1 이고, n>2 때 an = an-2 + an-1 이다.
inputN = int(input('n 입력 : '))  # n항 까지의 n

valueN = 0
sumN = 0

valuePreN2 = 0 # 가장 처음 수
valuePreN1 = 0 # 두번째 수

n = 1
while n <= inputN:
    if n == 1 or n == 2:
        valueN = 1
        valuePreN1 = valueN
        valuePreN2 = 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까지의 정수를 모두 곱한 것
    0! → 1 = 1 0의 팩토리얼은 그냥 0으로 약속 !
    1! → 1 = 1
    2! → 1 2 = 2
    3! → 1
    2 3 = 6
    4! → 1
    2 3 4 = 24
    5! → 1 2 3 4 5 = 120
  • 파이썬을 이용해서 팩토리얼 결괏값을 출력하는 프로그램을 만들어 보자.

[for 반복문을 이용하는 경우]

# for 반복문을 이용하는 경우
inputN = int(input('n 입력 : '))

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

print('{} 팩토리얼 : {}'.format(inputN, result))

[while 반복문을 이용하는 경우]

while 반복문을 이용하는 경우
inputN = int(input('n 입력 : '))

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

print('{} 팩토리얼 : {}'.format(inputN, result))

[재귀 함수를 이용하는 경우]

# 재귀 함수를 이용하는 경우
# 재귀함수 : 나 자신을 다시 호출하는 함수
def factorialFin(n):
    if n == 1:
        return 1

    return n * factorialFin(n - 1)

inputN = int(input('n 입력 : '))
print('{} 팩토리얼 : {}'.format(inputN, factorialFin(inputN)))

[math 모듈의 factorial 함수를 사용하는 경우]

# math 모듈의 factirial 함수를 사용하는 경우

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

import math
print('{} 팩토리얼 : {}'.format(inputN, math.factorial(inputN)))

군 수열

  • 묶어서 규칙성을 찾자!


    여러 개의 항을 묶었을 때 규칙성을 가지는 수열
    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군 2군 3군 4군 5군
    1개 2개 3개 4개 5개 ← 항 개수
    ↓ 50번째 항 ?


    an = a1 + (n - 1)d (일반항)
    sn = n(a1 + an) / 2

    an = n
    sn = (n^2 + n) / 2 → (9 * 9 + 9) / 2 → 9군 + 10군의 5 항 → 5
  • 다음 수열의 40번째 항의 값을 구해보자.


    1/1, 1/2, 2/1, 1/3, 2/2, 3/1, 1/4, 2/3, 3/2, 4/1, 1/5, 4/2, ...


    (1/1), (1/2, 2/1), (1/3, 2/2, 3/1), (1/4, 2/3, 3/2, 4/1), 1/5, 4/2, ...
    an = n
    sn = (n^2 + n) → (8 * 8 + 8) / 2 = 36 → 8군 + 9군의 4항

군 수열(파이썬)

  • 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자.


    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 2 3 4 5 → 공차가 1인 등차수열
inputN = int(input('n항 입력 : '))

flag = True

n = 1
nCnt = 1    # 내가 원하는 항 ex) 9번째 항
searchN = 0 # 내가 원하는 항에 들어가는 값

while flag:

    # 한 군 안에서의 반복
    for i in range(1, (n + 1)): # n은 군을 나타낸다
        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번째 항의 값을 출력하는 프로그램을 만들어보자.


    1/1, 1/2, 2/1, 1/3, 2/2, 3/1, 1/4, 2/3, 3/2, 4/1, 1/5, 4/2, ...


    (1/1), (1/2, 2/1), (1/3, 2/2, 3/1), (1/4, 2/3, 3/2, 4/1), 1/5, 4/2, ...
inputN = int(input('n항 입력 : '))

flag = True

n = 1
nCnt = 1
searchNC = 0 # 분자값
searchNP = 0 # 분모값

while flag:

    for i in range(1, (n + 1)):
        if i == n:
            print('{}/{}'.format(i, (n - i + 1)), end='')
        else:
            print('{}/{}, '.format(i, (n - i + 1)), end='')  # 콤마 구분

        nCnt += 1  # 한 군안에서의 항의 수

        if (nCnt > inputN):
            searchNC = i
            searchNP = n - i + 1
            flag = False
            break

    print()  # 하나의 군 완료 후 개행
    n += 1

print('{}항 : {}/{}'.format(inputN, searchNC, searchNP))

다시 이해해 보기!


이 글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었습니다.


profile
안녕하세요 반갑습니다^^

0개의 댓글