코딩하는 타코야끼

[스터디 노트] Week3_1일차 [unit15 ~ 30] - 기초수학 본문

zero-base 데이터 취업 스쿨/스터디 노트

[스터디 노트] Week3_1일차 [unit15 ~ 30] - 기초수학

가스오부시 2023. 7. 19. 06:26
728x90
반응형

1. 기초수학_4 [unit 15 ~ 17]


📍 등비 수열

  • 연속된 두 항의 비가 일정한 수열
  • 등비 수열 규칙성을 이용해서 일반항을 구할 수 있다

[출처: zero-base]

# 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자.
# an = {2, 4, 8, 16, 32, 64, 128, 256, ... }

num1 = int(input("a1 입력: "))
r = int(input("공비 입력: "))
num2 = int(input("n 입력: "))

value_n = 0
n = 1
while n <= num2:
    
    if n == 1:
        value_n = num1
        n += 1
        continue
    
    value_n *= r
    n += 1

print(f"{num2}번째 값: {value_n}")
>>>
a1 입력: 2
공비 입력: 3
n 입력: 5
5번째 값: 162
# a(n) = a(1) * r^(n-1)
result = num1 * r**(num2-1)

num1 = int(input("a1 입력: "))
r = int(input("공비 입력: "))
num2 = int(input("n 입력: "))

print(f"{num2}번째 값: {result}")
>>>
a1 입력: 2
공비 입력: 3
n 입력: 5
5번째 값: 162

📍 등비 중항

  • 연속된 세 항에서 가운데 항

[출처: zero-base]


📍 등비 수열의 합

  • 규칙성을 이용해서 모든 항들의 총합을 구할 수 있다.

[출처: zero-base]

# 다음 수열을 보고 n번째 항까지의 합을 출력하는 프로그램을 만들어보자.
# an = {5, 15, 45, 135, 405, 1215, 3645, ... }

num1 = int(input("a1 입력: "))
r = int(input("공비 입력: "))
num2 = int(input("n 입력: "))

value_n = 0
sum_n = 0
n = 1

while n <= num2:
    
    if n == 1:
        value_n = num1
        sum_n = value_n
        n += 1
        continue
        
    value_n *= r
    sum_n += value_n
    n += 1

print(f"{num2}까지의 공비의 합: {sum_n}")
>>>
a1 입력: 5
공비 입력: 3
n 입력: 7
7까지의 공비의 합: 5465
# a(1) * (1 - (r^n))) / (1 - r)

num1 = int(input("a1 입력: "))
r = int(input("공비 입력: "))
num2 = int(input("n 입력: "))

result = 5 * (1 - (r**num2)) / (1 - r)

print(f"{num2}까지의 공비의 합: {result}")
>>>
a1 입력: 5
공비 입력: 3
n 입력: 7
7까지의 공비의 합: 5465.0

2. 기초수학_5 ~ 6 [unit 18 ~ 25]


📍 시그마

  • ∑란, 수열의 합을 나타내는 기호이다.

[출처: zero-base]

# 시그마를 이용해서 나타낸 수열의 합을 파이썬 프로그램으로 만들어 보자.
# a(n) = a(1) + (n-1) * d
# n( a(1) + a(n) ) / 2

num1 = int(input("a1 입력: "))
d = int(input("공차 입력: "))
num2 = int(input("n 입력: "))

value_n = num1 + (num2 -1) * d
sum_n = int((num1 + value_n) * num2 / 2)

print(f"{num2}까지의 공차의 합: {sum_n}")
>>>
a1 입력: 2
공차 입력: 2
n 입력: 10
10까지의 공차의 합: 110
# 시그마를 이용해서 나타낸 수열의 합을 파이썬 프로그램으로 만들어 보자.
# a(1) * (1 - (r^n))) / (1 - r)

num1 = int(input("a1 입력: "))
r = int(input("공비 입력: "))
num2 = int(input("n 입력: "))

sum_n = int(num1 * (1 - (r**num2)) / (1 - r))

print(f"{num2}까지의 공차의 합: {sum_n}")
>>>
a1 입력: 2
공비 입력: 3
n 입력: 8
8까지의 공차의 합: 6560

📍 계차 수열

  • 어떤 수열의 인접하는 두 항의 차로 이루어진 또 다른 수열
# 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자.
# an = {3, 7, 13, 21, 31, 43, 57}

a_1 = int(input("a1 입력: "))
an = int(input("an 입력: "))
b_1 = int(input("b1 입력: "))
bn = int(input("bn 입력: "))

value_an = 0
value_bn = 0

n = 1
while n <= an:
    
    if n == 1:
        value_an = a_1
        value_bn = b_1
        n += 1
        continue
        
    value_an = an + bn
    value_bn += bn
    
    n += 1
    
    
print(f"{an}번째 항의 값: {value_an}")
print(f"{bn}번째 항의 값: {value_bn}")
>>>
a1 입력: 3
an 입력: 3
b1 입력: 4
bn 입력: 4
3번째 항의 값: 7
4번째 항의 값: 12

📍 피보나치 수열

  • 세 번째 항은 두 번째 항과 첫 번째 항을 더한 합이다.
def fibonacci(n):
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        a, b = 0, 1
        for _ in range(n-1):
            a, b = b, a + b
        return b
    
for i in range(1, 10):
    print(fibonacci(i))
>>>
1
1
2
3
5
8
13
21
34

📍 팩토리얼

  • 1부터 양의 정수 n까지의 정수를 모두 곱한 것
num = int(input("n 입력:"))

result = 1
for i in range(1, num+1):
    result *= i
    
print(f"{num} 팩토리얼:{result}")
>>>
n 입력:3
3 팩토리얼:6

📍 군 수열

  • 일련의 값들을 순서대로 모아 놓은 것을 의미합니다
num = int(input("n 입력:"))

flag = True
n = 1
n_cnt = 1
search_n = 0

while flag:
    
    for i in range(1, (n+1)):
        
        print(f"{i}", end="")
        
        n_cnt += 1
        if (n_cnt > num):
            search_n = i
            flag = False
            break
    print()
    n += 1

print(f"{num}항: {search_n}")
>>>
n 입력:15
1
12
123
1234
12345
15항: 5

3. 기초수학_7 [unit 26 ~ 30]


📍 순열

  • n개에서 r개를 택하여 나열하는 경우의 수
  • 순열은 팩토리얼(계승)을 이용해서 나타낼 수 있다.

# 파이썬을 이용해서 다음 순열들의 값을 구하는 프로그램을 만들어 보자.

num1 = int(input("num1 입력: "))
num2 = int(input("num2 입력: "))

result = 1

for i in range(num1, num1 - num2, -1):
    print(f"n: {i}")
    result *= i
    
print(f"result: {result}")
>>>
num1 입력: 8
num2 입력: 3
n: 8
n: 7
n: 6
result: 336

⚡️ 원순열

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

# 4명의 친구가 원탁 테이블에 앉을 수 있는 순서를 계산해보자.

num1 = int(input("친구 수 입력: "))

result = 1

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

print(f"{result = }")
>>>
친구 수 입력: 4
result = 6

📍 조합

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

# 파이썬을 이용해서 다음 조합들의 값을 구하는 프로그램을 만들어 보자.

num_n = int(input("num_n 입력: "))
num_r = int(input("num_r 입력: "))

result_p = 1 # 순열
result_r = 1
result_c = 1 # 조합

for i in range(num_n, num_n - num_r, -1):
    print(f"n: {i}")
    result_p *= i
print(f"{result_p = }")

for i in range(num_r, 0, -1):
    print(f"n: {i}")
    result_r *= i
print(f"{result_r = }")

result_c = int(result_p / result_r)

print(f"{result_c = }")
>>>
num_n 입력: 8
num_r 입력: 3
n: 8
n: 7
n: 6
result_p = 336
n: 3
n: 2
n: 1
result_r = 6
result_c = 56

📍 확률

  • 모든 사건에서 특정 사건이 일어날 수 있는 수를 나타낸 것.
  • 조합을 이용해서 확률을 알아낼 수 있다.
# 박스에 ‘꽝’이 적힌 종이가 4장 있고, ‘선물’이 적힌 종이가 3장이 있을 때,
# 파이썬을 이용해서 ‘꽝’2장과 ‘선물’ 1장을 뽑는 확률(%)을 출력하자.

def pro_fun():
    num_n = int(input("num_n 입력: "))
    num_r = int(input("num_r 입력: "))

    result_p = 1 # 순열
    result_r = 1
    result_c = 1 # 조합

    for i in range(num_n, num_n - num_r, -1):
        result_p *= i
    print(f"{result_p = }")

    for i in range(num_r, 0, -1):
        result_r *= i
    print(f"{result_r = }")

    result_c = int(result_p / result_r)
    print(f"{result_c = }")
    
    return result_c

sample = pro_fun()
print(f"{sample = }")
print("=" * 30)
event1 = pro_fun()
print(f"{event1 = }")
print("=" * 30)
event2 = pro_fun()
print(f"{event2 = }")
print("=" * 30)
probability = (event1 * event2) / sample
print(f"probability: {round(probability * 100, 2)}")
>>>
num_n 입력: 7
num_r 입력: 3
result_p = 210
result_r = 6
result_c = 35
sample = 35
==============================
num_n 입력: 4
num_r 입력: 2
result_p = 12
result_r = 2
result_c = 6
event1 = 6
==============================
num_n 입력: 3
num_r 입력: 1
result_p = 3
result_r = 1
result_c = 3
event2 = 3
==============================
probability: 51.43

⚡️ 순열과 조합의 차이점

  • 순열은 순서가 중요하고 상관이 있다.
  • 조합은 순서가 중요하지 않고 상관 없다.

반응형