해당 글은 제로베이스데이터스쿨 학습자료를 참고하여 작성되었습니다
- 특정한 규칙을 가지고 나열된 수
(출처:제로베이스데이터스쿨)
- 연속된 두 항의 차이가 일정한 수열
(출처:제로베이스데이터스쿨)
등차수열공식
- 일반항 :
- 등차중항 :
- 누적합 :
📝입력
import math
inputN1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))
valueN = 0
n = 1
while n <= inputN:
if n == 1:
valueN = inputN1
print('{}번째 항의 값: {}'.format(n, valueN))
n += 1
continue
valueN += inputD
print('{}번째 항의 값: {}'.format(n, valueN))
n += 1
print()
print('수학공식활용')
print(f'a{inputN}: ', end='')
print(inputN1 + (inputN-1) * inputD)
print(f'S{inputN}: ', end='')
print(inputN * (inputN1 + valueN) / 2)
print(f'일반항: {inputD}n', end='')
c = inputN1 - inputD
if c > 0:
print(f' + {c}')
elif c < 0:
print(f' - {int(math.fabs(c))}')
🧾출력
a1 입력: 2
공차 입력: 3
n 입력: 7
1번째 항의 값: 2
2번째 항의 값: 5
3번째 항의 값: 8
4번째 항의 값: 11
5번째 항의 값: 14
6번째 항의 값: 17
7번째 항의 값: 20
수학공식활용
a7: 20
S7: 77.0
일반항: 3n - 1
- 연속된 두 항의 비가 일정한 수열
(출처:제로베이스데이터스쿨)
등비수열공식
- 일반항 :
- 등비중항 :
- 누적합 :
📝입력
inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))
valueN = 0
n = 1
while n <= inputN:
if n == 1:
valueN = inputN1
print('{}번째 항의 값: {}'.format(n, valueN))
n += 1
continue
valueN *= inputR
print('{}번째 항의 값: {}'.format(n, valueN))
n += 1
print()
print('수학공식활용')
print(f'a{inputN}: ', end='')
print(inputN1 * inputR ** (inputN - 1))
print(f'S{inputN}: ', end='')
print(inputN1 * (1 - inputR ** inputN) / (1 - inputR))
print(f'일반항: {inputN1}', end='')
print(f' * {inputR}^(n-1)')
🧾출력
a1 입력: 2
공비 입력: 2
n 입력: 7
1번째 항의 값: 2
2번째 항의 값: 4
3번째 항의 값: 8
4번째 항의 값: 16
5번째 항의 값: 32
6번째 항의 값: 64
7번째 항의 값: 128
수학공식활용
a7: 128
S7: 254.0
일반항: 2 * 2^(n-1)
- 수열의 합을 나타내는 기호
(출처:제로베이스데이터스쿨)
- 어떤 수열의 인접하는 두 항의 차로 이루어진 또 다른 수열
(출처:제로베이스데이터스쿨)
📝입력
# an = {3, 7, 13, 21, 31, 43, 57}
# bn = {4, 6, 8, 10, 12, 14}
inputAN1 = int(input('a1 입력: '))
inputAN = int(input('an 입력: '))
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 += valueBN
valueBN += inputBD
print('an의 {}번째 항의 값: {}'.format(n, valueAN))
print('bn의 {}번째 항의 값: {}'.format(n, valueBN))
n += 1
🧾출력
a1 입력: 3
an 입력: 7
b1 입력: 4
bn 공차 입력: 2
an의 1번째 항의 값: 3
bn의 1번째 항의 값: 4
an의 2번째 항의 값: 7
bn의 2번째 항의 값: 6
an의 3번째 항의 값: 13
bn의 3번째 항의 값: 8
an의 4번째 항의 값: 21
bn의 4번째 항의 값: 10
an의 5번째 항의 값: 31
bn의 5번째 항의 값: 12
an의 6번째 항의 값: 43
bn의 6번째 항의 값: 14
an의 7번째 항의 값: 57
bn의 7번째 항의 값: 16
- 첫째항과 둘째항을 합친 수열
(출처:제로베이스데이터스쿨)
📝입력
inputN = int(input('n 입력: '))
valueN = 0
sumN = 0
valuePreN2 = 0
valuePreN1 = 0
n = 1
while n <= inputN:
if n in (1, 2):
valueN = 1
valuePreN2 = valueN
valuePreN1 = 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))
🧾출력
n 입력: 5
5번째 항의 값: 5
5번째 항까지의 합: 12
- 1부터 양의 정수 n까지의 정수를 모두 곱한 것
(출처:제로베이스데이터스쿨)
📝입력
def userFactorial(num):
if num == 1: return 1
return num * userFactorial(num - 1)
print('사용자 재귀함수 팩토리얼 ')
print(userFactorial(5))
import math
print()
print('math모듈 팩토리얼')
print(math.factorial(5))
🧾출력
사용자 재귀함수 팩토리얼
120
math모듈 팩토리얼
120
- 순서있게 n개에서 r개를 택하여 나열하는 경우의 수
(출처:제로베이스데이터스쿨)
📝입력
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
result = 1
for n in range(numN, numN-numR, -1):
print(f'n : {n}')
result = result * n
print('result: {}'.format(result))
print()
import math
print('math.perm(n, r) 사용')
print(math.perm(numN, numR))
print()
import itertools
print('itertools.permutations([1,2,3], r)으로 경우의 수 나열')
for i in itertools.permutations([1,2,3], numR):
print(i)
🧾출력
numN 입력: 4
numR 입력: 2
n : 4
n : 3
result: 12
math.perm(n, r) 사용
12
itertools.permutations([1,2,3], r)으로 경우의 수 나열
(1, 2)
(1, 3)
(2, 1)
(2, 3)
(3, 1)
(3, 2)
- 시작과 끝의 구분이 없는 순열
(출처:제로베이스데이터스쿨)
--
- 순서무관하게 n개에서 r개를 택하여 나열하는 경우의 수
(출처:제로베이스데이터스쿨)
📝입력
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN, numN-numR, -1):
print('n: {}'.format(n))
resultP *= n
print('resultP: {}'.format(resultP))
for n in range(numR, 0, -1):
print('n: {}'.format(n))
resultR *= n
print('resultR: {}'.format(resultR))
resultC = int(resultP / resultR)
print('resultC: {}'.format(resultC))
print()
import math
print('math.comb(n, r) 사용')
print(math.comb(numN, numR))
print()
import itertools
print('itertools.combinations(['O', 'O', 'O', 'X', 'X'], r)으로 경우의 수 나열')
for i in itertools.combinations(['O', 'O', 'O', 'X', 'X'], numR):
print(i)
🧾출력
numN 입력: 8
numR 입력: 3
n: 8
n: 7
n: 6
resultP: 336
n: 3
n: 2
n: 1
resultR: 6
resultC: 56
math.comb(n, r) 사용
56
itertools.combinations(['O', 'O', 'O', 'X', 'X'], r)으로 경우의 수 나열
('O', 'O', 'O')
('O', 'O', 'X')
('O', 'O', 'X')
('O', 'O', 'X')
('O', 'O', 'X')
('O', 'X', 'X')
('O', 'O', 'X')
('O', 'O', 'X')
('O', 'X', 'X')
('O', 'X', 'X')
- 모든 사건에서 특정 사건이 일어날 수 있는 수를 나타낸 것
(출처:제로베이스데이터스쿨)
📝입력
# 상자7개, 꽝4개, 선물3개인 경우 꽝2장과 선물 1장을 뽑을 확률구하기
def proFun():
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN, numN-numR, -1):
resultP *= n
print(f'resultP: {resultP}')
for n in range(numR, 0, -1):
resultR *= n
print(f'resultR: {resultR}')
resultC = int(resultP / resultR)
print(f'resultC: {resultC}')
return resultC
sample = proFun()
print('sample: {}'.format(sample))
print()
event1 = proFun()
print('event1: {}'.format(event1))
print()
event2 = proFun()
print('event2: {}'.format(event2))
print()
probability = (event1 * event2) / sample
print('probability: {}%'.format(round(probability * 100, 2)))
🧾출력
numN 입력: 7
numR 입력: 3
resultP: 210
resultR: 6
resultC: 35
sample: 35
numN 입력: 4
numR 입력: 2
resultP: 12
resultR: 2
resultC: 6
event1: 6
numN 입력: 3
numR 입력: 1
resultP: 3
resultR: 1
resultC: 3
event2: 3
probability: 51.43%