S9-1 · 개발자를 위한 수학

Mathematics
for Developers

알고리즘 복잡도 증명부터 그래픽스 변환, ML 원리까지.
코드 뒤에 숨어있는 수학을 직접 만져보세요.

∑ ∇ ∫ ∈ ⊕ ∩

이산수학 — 알고리즘의 수학적 기반

논리학, 집합론, 귀납법, 그래프 이론. 코드를 증명하고 최적화하는 언어입니다.

드모르간 법칙

DE MORGAN'S LAW · 조건문 최적화
¬

NOT(A AND B)는 (NOT A) OR (NOT B)와 동치입니다. 복잡한 조건문을 단순화할 때 핵심 도구가 됩니다.

드모르간 제1법칙
¬(A ∧ B) ≡ (¬A) ∨ (¬B)
드모르간 제2법칙
¬(A ∨ B) ≡ (¬A) ∧ (¬B)
▸ 진리표 인터랙티브
A
F
B
F
ABA∧B¬(A∧B)¬A∨¬B동치?
// Swift: 드모르간 적용 전 if !(isLoggedIn && hasPermission) { ... } // 드모르간 적용 후 (더 읽기 쉬움) if !isLoggedIn || !hasPermission { ... }

집합론

SET THEORY · Swift Set API 연결
∩

합집합, 교집합, 차집합은 Set 자료구조의 수학적 기반입니다. iOS의 Set API가 왜 이런 메서드를 갖는지 이해할 수 있습니다.

▸ Venn 다이어그램 — 연산 선택
let A: Set = [1, 2, 3, 4] let B: Set = [3, 4, 5, 6] A.union(B) // {1,2,3,4,5,6} — 합집합 A.intersection(B) // {3,4} — 교집합 A.subtracting(B) // {1,2} — 차집합

수학적 귀납법

MATHEMATICAL INDUCTION · 재귀 정확성 증명
∀

재귀 함수가 올바른지 증명하는 방법입니다. 기저 조건이 base case이고, 귀납 단계가 recursive step입니다.

1부터 n까지 합
1 + 2 + ... + n = n(n+1)/2
▸ 귀납 증명 단계 — n을 선택하세요
4
// 재귀 함수 — 귀납법 구조와 동일 func sum(_ n: Int) -> Int { guard n > 0 else { return 0 } // Base case return n + sum(n - 1) // Inductive step }

그래프 이론

GRAPH THEORY · BFS / DFS
⬡

BFS와 DFS는 그래프 탐색의 두 가지 전략입니다. BFS는 큐, DFS는 스택(or 재귀)로 구현됩니다.

▸ BFS / DFS 시각화
시작 노드
방문 완료
큐/스택
미방문

선형대수 — 그래픽스와 ML의 언어

행렬은 변환을 합성하는 수단입니다. ARKit, SceneKit, CoreML 모두 이 언어로 동작합니다.

벡터 연산

VECTORS · 방향과 크기
→

벡터는 방향과 크기를 가진 양입니다. 내적(dot product)은 두 벡터의 유사도, 외적(cross product)은 법선 벡터 계산에 사용됩니다.

내적 (Dot Product)
a⃗ · b⃗ = |a||b|cos θ = a₁b₁ + a₂b₂
▸ 벡터 시각화 — 슬라이더로 조작
30°
120°
내적: 0.00 각도: 0° 유사도: -
// SceneKit — 두 노드 사이 방향 벡터 import SceneKit let from = SCNVector3(0, 0, 0) let to = SCNVector3(3, 4, 0) let dir = normalize(to - from) // 단위 벡터 let dist = length(to - from) // 크기 = 5.0

변환 행렬

TRANSFORMATION MATRIX · ARKit / SceneKit
⊞

이동·회전·스케일은 행렬 곱셈으로 합성됩니다. ARKit의 simd_float4x4가 바로 이 변환 행렬입니다.

▸ 2D 변환 인터랙티브
0°
1.0×
0
// ARKit — 변환 행렬 읽기 let transform = anchor.transform // simd_float4x4 let position = SCNVector3( transform.columns.3.x, transform.columns.3.y, transform.columns.3.z )

CoreML과 행렬 연산

MATRIX MULTIPLICATION · Neural Networks
⊗

신경망의 각 레이어는 행렬 곱셈입니다. 입력 벡터 × 가중치 행렬 + 편향이 모든 레이어의 기본 연산입니다.

레이어 연산
y = f(Wx + b)
▸ 행렬 곱셈 단계별 시각화
// Swift — 행렬 곱 (Accelerate 프레임워크) import Accelerate cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, k, 1.0, &W, k, &x, n, 0.0, &result, n) // CoreML은 내부적으로 이 연산을 GPU에서 수행

행렬식과 고유값

DETERMINANT & EIGENVALUES · PCA의 수학
λ

행렬식(det)은 선형 변환이 공간을 얼마나 늘리거나 줄이는지 나타냅니다. 고유값·고유벡터는 PCA와 추천 시스템의 핵심입니다.

2×2 행렬식
det(A) = ad − bc
▸ 행렬식 계산기
let det = a*d - b*c if det == 0 { // 역행렬 없음 — 특이 행렬 (singular matrix) } else { // 역행렬 존재 — CoreML 역변환 가능 }

확률과 통계 — 데이터 기반 의사결정

A/B 테스트의 신뢰도, 추천 알고리즘의 근거, 수익 모델 계산. 모두 확률이 기반입니다.

베이즈 정리

BAYES' THEOREM · 추천 / 스팸 필터
∝

사전 지식(prior)을 새 증거로 업데이트하는 방법입니다. 스팸 필터, 추천 시스템, 의료 진단의 수학적 토대입니다.

베이즈 정리
P(A|B) = P(B|A) · P(A) / P(B)
▸ 스팸 필터 시뮬레이터

이메일에 특정 단어가 있을 때 스팸일 확률을 계산합니다.

30%
80%
10%
-
P(스팸 | 단어 있음)
-
P(정상 | 단어 있음)
// 나이브 베이즈 분류기 (간략 버전) func isSpam(words: [String]) -> Bool { var score = log(priorSpam) for word in words { score += log(likelihood[word] ?? 0.01) } return score > threshold }

A/B 테스트 유의성

STATISTICAL SIGNIFICANCE · Z-test
≠

A와 B 그룹의 전환율 차이가 우연인지, 통계적으로 유의미한 차이인지 Z-검정으로 판단합니다. p < 0.05가 기준입니다.

▸ A/B 검정 계산기

그룹 A (현재)

5.00%

그룹 B (변형)

7.00%
-
Z-score
let p1 = Double(aConv) / Double(aN) let p2 = Double(bConv) / Double(bN) let pPool = (aConv + bConv) / Double(aN + bN) let z = (p2 - p1) / sqrt(pPool * (1-pPool) * (1/aN + 1/bN)) // |z| > 1.96 → 95% 신뢰수준에서 유의미

기댓값과 수익 모델

EXPECTED VALUE · LTV / ARPU 계산
𝔼

기댓값은 각 결과의 확률 가중 평균입니다. 앱의 LTV(Lifetime Value)와 ARPU(평균 수익)를 수학적으로 계산하는 기반입니다.

기댓값
𝔼[X] = Σ xᵢ · P(xᵢ)
▸ 앱 수익 모델 기댓값

구독 티어별 비율을 조정하여 예상 ARPU를 계산하세요.

기댓값 (월 ARPU)
₩0
let tiers: [(price: Double, prob: Double)] = [ (0, 0.70), // 무료 70% (3900, 0.20), // 라이트 20% (9900, 0.08), // 스탠다드 8% (19900, 0.02), // 프로 2% ] let arpu = tiers.reduce(0) { $0 + $1.price * $1.prob }

정규분포와 표준편차

NORMAL DISTRIBUTION · 성능 분석
σ

앱의 응답 시간, 사용자 세션 길이, 로딩 속도는 대부분 정규분포를 따릅니다. σ(표준편차)로 성능의 일관성을 측정합니다.

정규분포 PDF
f(x) = 1/(σ√2π) · e^(−(x−μ)²/2σ²)
▸ 앱 응답시간 분포 시뮬레이터
200ms
40ms
let mu: Double = 200 // 평균 200ms let sigma: Double = 40 // 표준편차 40ms let p95 = mu + 1.645 * sigma // ≈ 265.8ms let p99 = mu + 2.326 * sigma // ≈ 293.0ms