math
CHAPTER 8 / 15
읽기 약 2분
FUNCTION
수열과 급수: 반복문의 수학
핵심 개념
등차수열·등비수열·시그마(Σ) — for 루프, 복리, reduce, 피보나치의 수학적 기반.
본문
수열 종류
| 종류 | 정의 | 예시 |
|---|---|---|
| 등차수열 | 일정한 차이 (d) | 2, 5, 8, 11, ... (d=3) |
| 등비수열 | 일정한 비율 (r) | 2, 4, 8, 16, ... (r=2) |
| 피보나치 | f(n) = f(n-1) + f(n-2) | 1, 1, 2, 3, 5, 8, ... |
| 조화수열 | 1/n | 1, 1/2, 1/3, 1/4, ... |
등차수열 = for 루프
# 첫째 항 a, 공차 d
# n번째 항: a_n = a + (n-1) * d
def arithmetic_sequence(a, d, n):
"""등차수열의 n번째 항까지 반환"""
return [a + i * d for i in range(n)]
print(arithmetic_sequence(2, 3, 10))
# [2, 5, 8, 11, 14, 17, 20, 23, 26, 29]
# 합 (등차수열 합 공식)
# S_n = n(a + a_n) / 2 = n(2a + (n-1)d) / 2
def arithmetic_sum(a, d, n):
a_n = a + (n - 1) * d
return n * (a + a_n) // 2
print(arithmetic_sum(2, 3, 10))
# 155 (위 리스트의 합과 동일)
# 검증 — for 루프 결과와 비교
total = 0
for i in range(10):
total += 2 + i * 3
print(total) # 155등비수열 = 복리 계산
# 첫째 항 a, 공비 r
# n번째 항: a_n = a * r^(n-1)
def geometric_sequence(a, r, n):
return [a * (r ** i) for i in range(n)]
print(geometric_sequence(1000, 1.05, 5))
# 원금 1000, 연 5% 복리 5년
# [1000.0, 1050.0, 1102.5, 1157.625, 1215.51]
# 복리 계산 — 투자 원금 + 이자
def compound_interest(principal, rate, years, n_per_year=1):
"""
principal: 원금
rate: 연 이자율 (0.05 = 5%)
years: 기간
n_per_year: 연 복리 횟수 (12=월복리, 365=일복리)
"""
return principal * (1 + rate / n_per_year) ** (n_per_year * years)
# 1000만원 투자, 연 7%, 10년
print(compound_interest(10_000_000, 0.07, 10))
# 19,671,513원 (97% 증가)
# 월복리는 더 유리
print(compound_interest(10_000_000, 0.07, 10, n_per_year=12))
# 20,096,613원시그마 Σ = reduce
from functools import reduce
# 수학: Σ_{i=1}^{n} i = n(n+1)/2
# 코드: reduce 또는 sum
n = 100
# 방법 1: 공식
formula = n * (n + 1) // 2
print(formula) # 5050
# 방법 2: 시그마 = reduce
sigma = reduce(lambda acc, x: acc + x, range(1, n+1), 0)
print(sigma) # 5050
# 방법 3: 빌트인 sum
print(sum(range(1, n+1))) # 5050
# 시그마는 단순 덧셈이 아닌 일반 누적 — reduce가 정확한 대응
# Σ_{i=1}^{n} f(i) ≡ reduce((acc, x) => acc + f(x), arr, 0)
# 예: 제곱의 합 Σi²
sum_of_squares = sum(i**2 for i in range(1, n+1))
print(sum_of_squares) # 338350
# 공식: n(n+1)(2n+1)/6
formula = n * (n + 1) * (2 * n + 1) // 6
print(formula) # 338350피보나치 — 재귀 vs 동적 계획
# 정의: f(n) = f(n-1) + f(n-2), f(1) = f(2) = 1
# Naive: O(2^n) — 중복 계산 폭주
def fib_naive(n):
if n <= 2:
return 1
return fib_naive(n-1) + fib_naive(n-2)
# 메모이제이션: O(n)
def fib_memo(n, cache={}):
if n in cache:
return cache[n]
if n <= 2:
return 1
cache[n] = fib_memo(n-1) + fib_memo(n-2)
return cache[n]
# 반복문: O(n), 공간 O(1)
def fib_iter(n):
a, b = 1, 1
for _ in range(n - 1):
a, b = b, a + b
return a
import time
t0 = time.perf_counter()
print(fib_iter(50)) # 12586269025
print(f"{(time.perf_counter() - t0)*1000:.3f}ms") # < 0.01ms
# fib_naive(50)은 약 15분+ 걸림 — 절대 시도하지 말 것
# 황금비 — 피보나치 비율의 극한
import math
golden_ratio = (1 + math.sqrt(5)) / 2 # ≈ 1.618
print(fib_iter(20) / fib_iter(19)) # ≈ 1.618실전 — 페이지네이션 공식
# 데이터 N개를 페이지당 P개씩 표시할 때 총 페이지 수
import math
def total_pages(n, per_page):
return math.ceil(n / per_page)
# 이는 등차수열의 일반항과 관련
# 시작 인덱스: page_index * per_page
# 끝 인덱스: min((page_index+1) * per_page, n)
def paginate(items, page, per_page=10):
start = (page - 1) * per_page
end = start + per_page
return items[start:end]
items = list(range(1, 101))
print(paginate(items, 1)) # [1, 2, ..., 10]
print(paginate(items, 5)) # [41, 42, ..., 50]
print(paginate(items, 10)) # [91, 92, ..., 100]다음 모듈 (논리)
CH.9 "참과 거짓: Boolean의 수학" — if/else의 수학적 기반 시작.
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내 코드의 for 루프 패턴을 분석해서 수학적 수열로 표현 가능한 위치와 공식으로 단축 가능한 부분을 찾아줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
한국 핀테크 앱 5개의 복리 계산 UI/UX 패턴을 사용자 이해도 관점에서 비교해줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 알고리즘 코드의 재귀 호출을 분석해서 메모이제이션 적용 가능 위치와 예상 성능 향상을 보고해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 코딩 테스트에서 동적 계획법 출제 빈도와 한국/해외 기업 차이를 솔직히 알려줘.
⭐ 이것만 기억하세요
수열과 급수: 반복문의 수학은 이 3가지만 확실히 잡으세요
1.수학의 수열·급수는 코드의 for 루프·reduce와 1:1 대응 — 공식 외우지 말고 reduce 패턴으로 이해
2.등비수열은 복리 계산의 본질 — 작은 비율도 시간이 쌓이면 폭발적 (만달러 7% 10년 = 약 2배)
3.다음 모듈(논리·불대수)에서 if/else의 수학적 기반 — Boolean·진리표·드모르간 법칙
공유하기
진행도 8 / 15