python - 기초 수학 : 데이터 취업 스쿨 스터디 노트 11/14

slocat·2023년 11월 14일
0

start-data

목록 보기
12/75

계차 수열

계차 수열은 두 항의 차로 이루어진 또 다른 수열이다.

# {3, 7, 13, 21, 31, 43, 57}
# => {4, 6, 8, 10, 12, 14} 을 이용해서 위 수열의 일반항 구하기

a1 = 3
num = 7

b1 = 4
d = 2

valueA = 0
valuesA = []
valueB = 0
valuesB = []

n = 1
while n <= num:
    if n == 1:
        valueA = a1
        valueB = b1
        valuesA.append(valueA)
        valuesB.append(valueB)
        n += 1
        continue

    valueA += valueB
    valuesA.append(valueA)
    valueB += d
    valuesB.append(valueB)
    n += 1

print(f'{num}번째 항의 값: {valueA}')
print(f'{num}번째까지의 값: {valuesA}')
print(f'계차 수열: {valuesB}')

>>>
7번째 항의 값: 57
7번째까지의 값: [3, 7, 13, 21, 31, 43, 57]
계차 수열: [4, 6, 8, 10, 12, 14, 16]

피보나치 수열

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

num = 9
value = 0
values = []
sum = 0

valuePre2 = 0
valuePre1 = 0

n = 1
while n <= num:
    if n == 1 or n == 2:
        value = 1
        valuePre2 = value
        valuePre1 = value
        values.append(value)
        sum += value
        n += 1
        continue

    value = valuePre2 + valuePre1
    valuePre2 = valuePre1
    valuePre1 = value
    values.append(value)
    sum += value
    n += 1

print(f'{num}번째 항의 값: {value}')
print(f'{num}번째까지의 합: {sum}')
print(f'{num}까지의 값: {values}')

>>>
9번째 항의 값: 34
9번째까지의 합: 88
9까지의 값: [1, 1, 2, 3, 5, 8, 13, 21, 34]

팩토리얼(!)

정수 n까지 모든 정수를 곱한 값
⭐0! = 1

# 반복문 이용
num = 5
result = 1

for i in range(1, num+1):
    result *= i

print(f'{num}! = {result}')

>>>
5! = 120
# 재귀함수 이용
def factorialFun(num):
    if num == 1:
        return 1

    return num * factorialFun(num - 1)

print(f'{num}! = {factorialFun(num)}')

>>>
5! = 120
# 모듈 이용
import math

print(f'{num}! = {math.factorial(num)}')

>>>
5! = 120

군 수열

묶으면 규칙이 보인다!

# (1) (1 2) (1 2 3) (1 2 3 4) (1 2 3 4 5) ...
num = 25

nCnt = 1
groupNum = 1
searchNum = 0

flag = True
while flag:

    for i in range(1, groupNum+1):
        print(f'{i}', end=' ')
        nCnt += 1

        if nCnt > num:
            searchNum = i
            flag = False
            break

    print()
    groupNum += 1

print(f'{num}항 = {searchNum}')

>>>
1 
1 2 
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4
25항 = 4

순열

nPr : n개 중에서 r개를 선택하여 나열하는 경우의 수
(순서가 다르면 다른 경우로 취급)
⭐ nPn = n! / (n-n)! = n! / 0! = n!

numN = 7
numR = 5

result = 1
for i in range(numN, numN - numR, -1):
    result *= i

print(f'nPr = {result}')

>>>
nPr = 2520    
# math.factorial() 이용
import math

result = math.factorial(numN) / math.factorial(numN - numR)
print(f'nPr = {int(result)}')

>>>
nPr = 2520    

조합

nCr : n개 중에서 r을 선택하는 경우의 수(순서 무관)

numN = 5
numR = 2

resultP = 1
resultR = 1
resultC = 1

for i in range(numN, numN - numR, -1):
    resultP *= i

for i in range(1, numR + 1):
    resultR *= i

resultC = int(resultP / resultR)

print(f'nPr = {resultP}')
print(f'r! = {resultR}')
print(f'nCr = {resultC}')

>>>
nPr = 20
r! = 2
nCr = 10

확률

모든 사건에서 특정 사건이 일어날 수 있는 경우의 수
모든 사건 = 표본 공간 = sample
특정 사건 = 사건 = event
조합을 이용해서 확률을 구할 수 있다.

def combination(numN, numR):
    resultP = 1
    resultR = 1

    for i in range(numN, numN - numR, -1):
        resultP *= i

    for i in range(1, numR + 1):
        resultR *= i

    return resultP / resultR


sample = combination(7, 3)
event1 = combination(4, 2)
event2 = combination(3, 1)

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

>>>
probability = 51.43%

복습할 코드

❗ flag += 1 이용해서 두 가지 조건을 만족하는 경우 찾아내기

❗ 소인수의 지수 구할 때

temp = 0
for num in primeF:
    if temp != num:
        print(f'소인수의 {num}의 지수: {primeF.count(num)}')
        temp = num

🚗 기초수학 파트를 마무리했다.
이론 강의 때와 비슷한 문제를 풀어보면서 복습하니까, 어떤 부분을 이해하지 못하고 넘어갔는지 알 수 있었다.

🚕 자료구조 파트 시작! 팀 스터디 과제도 할 생각이다.

0개의 댓글