[제로베이스_데이터 취업 스쿨 16기](6/16 ~ 18) - 기초 수학2

jumee·2023년 6월 20일
0
post-thumbnail

기초수학2


수열

1. 등차수열

🔻연습 문제🔻

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

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

n = 1
result = 0
while n <= inputN:
    # 항의 값을 구하기
    result = inputN1 + (n - 1) * inputD
    print(f'{n}번째 항의 값: {result}')
    n += 1
# 등차수열의 n번째 항까지의 합을 구하는 프로그램을 만들자.

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

n = 1
while n <= inputN:
    # 첫째항과 끝항을 이용한 식으로 합을 구하자
    sum = (inputN1 + (inputN1 + inputD * (n - 1))) * n / 2
    print(f'{n}번째 항까지의 합: {int(sum)}')
    n += 1

2. 등비수열

🔻연습 문제🔻

# n번째 항의 값을 출력하는 프로그램. 등비수열

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

n = 1
result = 1
while n <= inputN:
    result = inputN1 * inputR ** (n-1)
    print(f'{n}번째 항의 값: {result}')
    n += 1
# n번째 항까지의 합을 구하는 프로그램

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

n = 1
result = 1
sum = 0
while n <= inputN:
    result = inputN1 * inputR ** (n-1) # n번째의 값
    sum += result
    print(f'{n}번째 항까지의 합: {sum}')
    n += 1

# 등비수열의 합을 구하는 공식 활용하는 방법
# n번째 항까지의 합을 구하는 프로그램

result = inputN1 * (1 - (inputR ** inputN)) / (1 - inputR)
print(f'{inputN}번째까지의 등비수열 합: {int(result)}')

3. 계차수열

두 항의 차이로 이루어진 수열이다.

🔻연습 문제🔻

# 계차수열의 n번째 항의 값을 출력하는 프로그램을 만들어보자.

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: # 1번째 항
        valueAn = inputAn1
        valueBn = inputBn1
        print(f'an의 1번째 항의 값: {valueAn}')
        print(f'bn의 1번째 항의 값: {valueBn}')
        n += 1
        continue

    valueAn = valueAn + valueBn
    valueBn = valueBn + inputBD
    print(f'an의 {n}번째 항의 값: {valueAn}')
    print(f'bn의 {n}번째 항의 값: {valueBn}')
    n += 1

print(f'an의 {inputAn}번째 항의 값: {valueAn}')
print(f'bn의 {inputAn - 1}번째 항의 값: {valueBn}')

# 계차수열 항 구하기
bn = inputBn1 + (inputAn-1) * inputBD
# bn의 n-1 항까지의 합 - a1 을 계산하면 an의 값을 구할 수 있다.

inputAn1 = int(input('a1 입력: '))
inputAn = int(input('an 입력: ')) # n번째 항

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

# inputBn1 + inputBD * (inputAn - 1) # b(n-1) 의 값
sumBn = (inputBn1 + inputBD * (inputAn - 1) + inputBn1) * (inputAn - 1) / 2 # b(n-1)까지의 합
An = sumBn - inputAn1 # an

4. 피보나치 수열

전항과 전전항을 더한 값으로 이루어진 수열

✅ 적어도 두 항은 있어야 하며, 1,2번째 항은 모두 1이어야 한다.✅

5. 군 수열

여러 개의 항을 묶었을 때 규칙성을 보이는 수열

🔻연습 문제🔻

EX1.

intputN = int(input('n항 입력: '))

flag = True
n = 1; nCnt = 1; searchN = 0 # nCnt 는 n항의 숫자를 담는 변수, searchN은 해당 항의 값을 담는 변수
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))

EX2.

# 분모값 따로, 분자값 따로 만들어줘야 한다.

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

flag = True
n = 1; nCnt = 1; searchNC = 0; searchNP = 0
while flag:

    for i in range(1, (n + 1)): # 1 ~ n까지
        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))

팩토리얼

크게 3가지 방식으로 구현할 수 있는데 아래와 같다.

  1. 반복문 사용하기
  2. 재귀함수 사용하기
  3. 내장 모듈 사용하기
  • 반복문으로 구현
# 팩토리얼
# 1.반복문
inputN = int(input('n 입력: '))

result = 1
for i in range(inputN,0,-1):
    result *= i

print(f'{inputN} 팩토리얼: {result}')

# 또는
n = 1
result = 1
while n <= inputN:
		result *= n
		n += 1

print(f'{inputN} 팩토리얼: {result}')
  • 재귀함수로 구현

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

def factorialFun(n):
		if n == 1: return 1

		return n * factorialFun(n-1)

print(f'{inputN} 팩토리얼: {factorialFun(inputN)}')
  • 내장 모듈 - math() 사용
**# math 기능 활용하기** 
import math

print(math.factorial(inputN))

순열 : nPr

순서를 지켜서 일렬로 나열하는 경우의 수

🔻연습 문제🔻

# 파이썬을 이용해서 순열을 구하는 프로그램
n = int(input('N 입력: '))
r = int(input('R 입력: '))

result = 1 #결과값 초기화
# nPr = n * (n-1) * ... * (n-r+1)

for i in range(n, (n-r), -1):
    result *= i

print('{}P{} 의 값 : {}'.format(n, r, result))

원순열

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

🔻연습 문제🔻

# n명의 사람이 원탁 테이블에 앉는 경우의 수를 구하자
# 1. math 모듈 활용
import math
n = int(input('친구 수 입력: '))
result = 1
print('{}명의 사람이 원탁에 앉는 경우의 수: {}'.format(n,math.factorial(n-1)))

# 2. 
n = int(input('친구 수 입력: '))
result = 1
for i in range(n-1, 0, -1): # 또는 range(1,n)
    result *= i
print('{}명의 사람이 원탁에 앉는 경우의 수: {}'.format(n,result))

조합 : nCr

순서에 상관없이 r개를 뽑는 경우의 수

🔻연습 문제🔻

# 조합을 계산하는 프로그램을 만들자.
# 1. math
n = int(input('N 입력: '))
r = int(input('R 입력: '))
import math
result = 1

# nCr = n * ... * (n - r + 1) / r! -> (n - r)! / r!
result = (math.factorial(n) / math.factorial(n-r)) / math.factorial(r)
print('{}C{} 의 값: {}'.format(n,r,int(result)))

확률

모든 사건에서 특정 사건이 일어나는 경우의 수

✅ 일반적으로 조합을 이용해서 확률을 구할 수 있다.✅

🔻연습 문제🔻

import math
# 꽝이 4개, 선물이 3개 중에서 꽝 2개, 선물 1개를 뽑는 확률을 구하자.

while True:
    n = int(input('전체 카드 수 입력: '))
    r = int(input('뽑을 카드 수 입력: '))

    tot_case = math.factorial(n) / math.factorial(n-r) / math.factorial(r)
    print('sample: {}'.format(int(tot_case)))

    fail_n = int(input('fail card count 입력: '))
    fail_r = int(input('fail get count 입력: '))
    fail_case = math.factorial(fail_n) / math.factorial(fail_n - fail_r) / math.factorial(fail_r)
    print('event1: {}'.format(int(fail_case)))

    wow_n = int(input('wow card count 입력: '))
    wow_r = int(input('wow get count 입력: '))
    wow_case = math.factorial(wow_n) / math.factorial(wow_n - wow_r) / math.factorial(wow_r)
    print('event2: {}'.format(int(wow_case)))

    break
result = (fail_case * wow_case / tot_case) * 100
print('probability: {}%'.format(round(result,2)))

🔜 다음 스터디 노트..

다음 스터디 노트에서는 기초수학과 관련된 연습 문제 풀이를 정리해보도록 하겠다.😊

profile
공부한 내용들에 대해 끄적이는 공간입니다💎

0개의 댓글