- 수열의 합을 나타낸 기호 → ∑
2 6 18 54 162 486 1458 4374
3 3 3 3 3 3 3
sn = {a1 + a2 + a3 + ... + an}
n 끝
=> ∑ a1 * r^(k-1) 일반항 => 1부터 n항까지의 합을 구하자!
k=1 시작
- 실습1
'시그마를 이용해서 나타낸 수열의 합을 파이썬 프로그램으로 만들어 보자.
10
∑ 2 * k => {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
k=1
등차 수열의 합 공식
an = a1 + (n-1)d
sn = n(a1 + an) / 2
inputN1 = int(input('a1 입력 : '))
inputD = int(input('공차 입력 : '))
inputN = int(input('n 입력 : '))
valueN = inputN1 + (inputN - 1) * inputD # 일반항 구하기
sumN = inputN * (inputN1 + valueN) / 2
print('{}번째 항까지의 합 : {}'.format(inputN, int(sumN)))
- 실습2
'시그마를 이용해서 나타낸 수열의 합을 파이썬 프로그램으로 만들어 보자.
8
∑ 2 * 3^(k-1) => {2, 6, 18, 54, 162, 486, 1458, 4374}
k=1
# 등비 수열의 합 공식
# an = a1 + (n-1)d
# sn = a1 * (1 - r^n) / (1 - r)
inputN1 = int(input('a1 입력 : '))
inputR = int(input('공비 입력 : '))
inputN = int(input('n 입력 : '))
sumN = inputN1 * (1 - inputR ** inputN) / (1 - inputR)
print('{}번째 항까지의 합 : {}'.format(inputN, int(sumN)))
- 두 항의차로 이루어진 또 다른 수열!
어떤 수열의 인접하는 두항의 차로 이루어진 또 다른 수열
{an} 0 3 8 15 24 35 48 63
{bn} 3 5 7 9 11 13 15 ← 공차가 2인 등차 수열
{bn}은 {an}의 계차 수열
- 계차 수열을 이용해서 수열 an의 일반항을 구할 수 있다.
{an} 0 3 8 15 24 35 48 63
{bn} 3 5 7 9 11 13 15
b1 = a2 - a1
b2 = a3 - a2
b3 = a4 - a3
b4 = a5 - a4
b5 = a6 - a5
...
bn-1 = an - an-1
n-1
=> ∑ bk = an - a1 => an = n^2 - 1
k=1
- 실습
계차 수열을 이용해서 수열 an의 일반항을 구해보자.
{an} = {3, 7, 13, 21, 31, 43, 57}
{bn} = {4, 6, 8, 10, 12, 14}
직접해볼 것!
- 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자.
an = {3, 7, 13, 21, 31, 43, 57}
4 6 8 10 12 14
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:
valueAN = inputAN1
valueBN = inputBN1
print('an의 {}번째 항의 값 : {}'.format(n, valueAN))
print('bn의 {}번째 항의 값 : {}'.format(n, valueBN))
n += 1
continue
valueAN = valueAN + valueBN # valueBN 만큼 차이가 나므로
valueBN = valueBN + inputBD
print('an의 {}번째 항의 값 : {}'.format(n, valueAN))
print('bn의 {}번째 항의 값 : {}'.format(n, valueBN))
n += 1
print('an의 {}번째 항의 값 : {}'.format(inputAN, valueAN))
print('bn의 {}번째 항의 값 : {}'.format(n, valueBN))
[공식을 사용한 코딩]
# 공식을 사용한 코딩
# n^2 + n + 1 = an
valueAN = inputAN ** 2 + inputAN + 1
print('an의 {}번째 항의 값 : {}'.format(inputAN, valueAN))
- an = an(n-2) + an(n-1)
세 번째 항은 두 번째 항과 첫 번째 항을 더한 합이다.
[1][1][2][3][5][8][13][21]
a1 = 1, a2 = 1 이고, n>2 때 an = an-2 + an-1 이다.
inputN = int(input('n 입력 : ')) # n항 까지의 n
valueN = 0
sumN = 0
valuePreN2 = 0 # 가장 처음 수
valuePreN1 = 0 # 두번째 수
n = 1
while n <= inputN:
if n == 1 or n == 2:
valueN = 1
valuePreN1 = valueN
valuePreN2 = 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))
- 1부터 양의 정수 n까지의 정수를 모두 곱한 것
0! → 1 = 1 0의 팩토리얼은 그냥 0으로 약속 !
1! → 1 = 1
2! → 1 2 = 2
3! → 1 2 3 = 6
4! → 1 2 3 4 = 24
5! → 1 2 3 4 5 = 120
- 파이썬을 이용해서 팩토리얼 결괏값을 출력하는 프로그램을 만들어 보자.
[for 반복문을 이용하는 경우]
# for 반복문을 이용하는 경우
inputN = int(input('n 입력 : '))
result = 1
for n in range(1, inputN + 1):
result *= n
print('{} 팩토리얼 : {}'.format(inputN, result))
[while 반복문을 이용하는 경우]
while 반복문을 이용하는 경우
inputN = int(input('n 입력 : '))
result = 1
n = 1
while n <= inputN:
result *= n
n += 1
print('{} 팩토리얼 : {}'.format(inputN, result))
[재귀 함수를 이용하는 경우]
# 재귀 함수를 이용하는 경우
# 재귀함수 : 나 자신을 다시 호출하는 함수
def factorialFin(n):
if n == 1:
return 1
return n * factorialFin(n - 1)
inputN = int(input('n 입력 : '))
print('{} 팩토리얼 : {}'.format(inputN, factorialFin(inputN)))
[math 모듈의 factorial 함수를 사용하는 경우]
# math 모듈의 factirial 함수를 사용하는 경우
inputN = int(input('n 입력 : '))
import math
print('{} 팩토리얼 : {}'.format(inputN, math.factorial(inputN)))
- 묶어서 규칙성을 찾자!
여러 개의 항을 묶었을 때 규칙성을 가지는 수열
1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, ...
↓ 항을 묶어서 규칙성을 찾는다
(1), (1, 2), (1, 2, 3), (1, 2, 3, 4), (1, 2, 3, 4, 5), ...
1군 2군 3군 4군 5군
1개 2개 3개 4개 5개 ← 항 개수
↓ 50번째 항 ?
an = a1 + (n - 1)d (일반항)
sn = n(a1 + an) / 2
↓
an = n
sn = (n^2 + n) / 2 → (9 * 9 + 9) / 2 → 9군 + 10군의 5 항 → 5
- 다음 수열의 40번째 항의 값을 구해보자.
1/1, 1/2, 2/1, 1/3, 2/2, 3/1, 1/4, 2/3, 3/2, 4/1, 1/5, 4/2, ...
(1/1), (1/2, 2/1), (1/3, 2/2, 3/1), (1/4, 2/3, 3/2, 4/1), 1/5, 4/2, ...
an = n
sn = (n^2 + n) → (8 * 8 + 8) / 2 = 36 → 8군 + 9군의 4항
- 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자.
1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, ...
↓ 항을 묶어서 규칙성을 찾는다
(1), (1, 2), (1, 2, 3), (1, 2, 3, 4), (1, 2, 3, 4, 5), ...
1 2 3 4 5 → 공차가 1인 등차수열
inputN = int(input('n항 입력 : '))
flag = True
n = 1
nCnt = 1 # 내가 원하는 항 ex) 9번째 항
searchN = 0 # 내가 원하는 항에 들어가는 값
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))
- 다음 수열을 보고 n번째 항의 값을 출력하는 프로그램을 만들어보자.
1/1, 1/2, 2/1, 1/3, 2/2, 3/1, 1/4, 2/3, 3/2, 4/1, 1/5, 4/2, ...
(1/1), (1/2, 2/1), (1/3, 2/2, 3/1), (1/4, 2/3, 3/2, 4/1), 1/5, 4/2, ...
inputN = int(input('n항 입력 : '))
flag = True
n = 1
nCnt = 1
searchNC = 0 # 분자값
searchNP = 0 # 분모값
while flag:
for i in range(1, (n + 1)):
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))
다시 이해해 보기!
이 글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었습니다.