🔻연습 문제🔻
# 수열을 보고 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
🔻연습 문제🔻
# 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)}')
두 항의 차이로 이루어진 수열이다.
🔻연습 문제🔻
# 계차수열의 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
전항과 전전항을 더한 값으로 이루어진 수열
✅ 적어도 두 항은 있어야 하며, 1,2번째 항은 모두 1이어야 한다.✅
여러 개의 항을 묶었을 때 규칙성을 보이는 수열
🔻연습 문제🔻
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.반복문
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 기능 활용하기**
import math
print(math.factorial(inputN))
순서를 지켜서 일렬로 나열하는 경우의 수
🔻연습 문제🔻
# 파이썬을 이용해서 순열을 구하는 프로그램
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))
순서에 상관없이 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)))
다음 스터디 노트에서는 기초수학과 관련된 연습 문제 풀이를 정리해보도록 하겠다.😊