OPEN HYPER STEP
← 목록으로 (math)
MATH · 33 / 45
math
CHAPTER 33 / 45
읽기 약 2
FUNCTION

알고리즘 수학 종합


핵심 개념

모듈 4 종합 — 빅오 분석 + 최적 알고리즘 선택 + 코딩 테스트 수학 Top 5 유형.

본문

코딩 테스트 수학 유형 Top 5

1. 시간복잡도 분석

PYTHON📋 코드 (26줄)
# 문제: 다음 코드의 시간복잡도?

def mystery(arr):
    n = len(arr)
    result = []
    for i in range(n):           # O(n)
        for j in range(i+1, n):  # O(n)
            if arr[i] + arr[j] == 0:
                result.append((i, j))
    return result


# 분석: O(n²)
# n=10,000 → 1억 연산 → 약 1초
# n=100,000 → 100억 연산 → 100초+ (시간 초과)


# 개선: 해시셋으로 O(n)
def mystery_v2(arr):
    seen = set()
    result = []
    for i, x in enumerate(arr):
        if -x in seen:
            result.append((i, x))
        seen.add(x)
    return result

2. 정렬 + 이진 검색

PYTHON📋 코드 (22줄)
# 문제: 정렬되지 않은 배열에서 두 수의 합이 target인 쌍 찾기

import bisect

def find_pairs(arr, target):
    arr = sorted(arr)  # O(n log n)
    pairs = []
    for i, x in enumerate(arr):
        # 나머지가 정렬된 부분에 있는지 이진 탐색
        complement = target - x
        idx = bisect.bisect_left(arr, complement, i+1)
        if idx < len(arr) and arr[idx] == complement:
            pairs.append((x, complement))
    return pairs


print(find_pairs([3, 1, 4, 1, 5, 9, 2, 6], 7))
# [(1, 6), (3, 4)]


# 시간: O(n log n) 정렬 + O(n log n) 검색
# 공간: O(n) 정렬 결과

3. DP — 분할 정복

PYTHON📋 코드 (18줄)
# 문제: 1~n 까지 만들 수 있는 코인 조합 수 (동전 [1,2,5])

def count_ways(coins, amount):
    """동전 조합으로 amount 만드는 경우의 수"""
    dp = [0] * (amount + 1)
    dp[0] = 1
    for coin in coins:
        for a in range(coin, amount + 1):
            dp[a] += dp[a - coin]
    return dp[amount]


print(count_ways([1, 2, 5], 11))  # 11
# {1*11}, {1*9+2}, {1*7+2*2}, ..., {5+5+1} 등 11가지


# 시간: O(coins × amount)
# 공간: O(amount)

4. 그래프 탐색

PYTHON📋 코드 (47줄)
# 문제: 미로에서 출구까지 최단 경로

from collections import deque

maze = [
    "S#####",
    ".....#",
    "#.#.##",
    "#.#..#",
    "#####E",
]


def shortest_path_maze(maze):
    rows, cols = len(maze), len(maze[0])

    # 시작/끝 찾기
    start = end = None
    for r in range(rows):
        for c in range(cols):
            if maze[r][c] == 'S': start = (r, c)
            elif maze[r][c] == 'E': end = (r, c)

    # BFS
    queue = deque([(start, 0)])
    visited = {start}

    while queue:
        (r, c), dist = queue.popleft()
        if (r, c) == end:
            return dist

        for dr, dc in [(-1,0), (1,0), (0,-1), (0,1)]:
            nr, nc = r + dr, c + dc
            if (0 <= nr < rows and 0 <= nc < cols
                and (nr, nc) not in visited
                and maze[nr][nc] != '#'):
                visited.add((nr, nc))
                queue.append(((nr, nc), dist + 1))

    return -1


print(shortest_path_maze(maze))  # 최단 거리 출력


# BFS — 시간 O(rows × cols), 공간 O(rows × cols)

5. 비트마스크 DP

PYTHON📋 코드 (41줄)
# 문제: N개 도시를 모두 방문하는 최단 경로 (외판원 문제)
# 비트마스크로 방문한 도시 집합 표현 → DP

def tsp(distances):
    n = len(distances)
    INF = float('inf')

    # dp[mask][i] = mask 상태 + 마지막 도시 i까지의 최단 거리
    dp = [[INF] * n for _ in range(1 << n)]
    dp[1][0] = 0  # 시작: 도시 0에서 출발, 비트 0번 켜짐

    for mask in range(1 << n):
        for u in range(n):
            if dp[mask][u] == INF:
                continue
            # 도시 u에서 갈 수 있는 다음 도시 v
            for v in range(n):
                if mask & (1 << v):  # 이미 방문
                    continue
                new_mask = mask | (1 << v)
                dp[new_mask][v] = min(
                    dp[new_mask][v],
                    dp[mask][u] + distances[u][v]
                )

    # 모든 도시 방문 후 0으로 돌아오기
    full = (1 << n) - 1
    return min(dp[full][i] + distances[i][0] for i in range(1, n))


distances = [
    [0, 10, 15, 20],
    [10, 0, 35, 25],
    [15, 35, 0, 30],
    [20, 25, 30, 0],
]
print(tsp(distances))  # 80


# 시간: O(2^n × n²)
# n=20에서도 약 4억 연산 — 1초 내

모듈 4 자가 진단

📋 코드 (8줄)
□ 빅오 표기법 7가지 (O(1)~O(2^n)) 즉시 판단
□ 시간 vs 공간 트레이드오프 의식적 선택
□ 비교 정렬 하한 O(n log n) 이해 + 카운팅 정렬 조건
□ 이진 검색 + bisect 활용
□ 점화식 → 마스터 정리로 시간복잡도 도출
□ DP 두 조건(최적 부분 구조 + 중복 부분 문제) 판단
□ 그리디 정당성 증명 + 실패 케이스 식별
□ 비트마스크로 부분집합 표현 + DP 결합

다음 모듈 (확률·통계)

CH.34~ "확률과 통계" — Z-test·베이즈 정리·머신러닝 기초.

알고리즘 수학 학습 다음 단계

📋 코드 (10줄)
1. 백준 / 프로그래머스 — 문제 풀이 (단계별)
   · Bronze → Silver → Gold (3개월~1년)
2. LeetCode — 영어 문제 + Top 100
   · Easy 50개 → Medium 100개 → Hard 30개
3. Codeforces — 실시간 경쟁
   · Round 참여 + 레이팅 1500+ 목표
4. 책: "알고리즘 문제 해결 전략" (구종만)
       "알고리즘 트레이닝" (Steven Halim)
5. 시니어 면접 대비
   · 시간복잡도 즉답 + 코드 작성 + 최적화 토론

AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 알고리즘 문제 풀이 패턴을 분석해서
5대 유형별 강약점 + 다음 30일
학습 플랜을 만들어줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

한국 IT 대기업(네이버/카카오/쿠팡) 코딩
테스트 출제 패턴 분석 + 합격 전략을
실제 사례로 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 알고리즘 학습 데이터를 종합 분석해서
6개 모듈 자가 진단 + 시니어 면접
12주 준비 로드맵을 만들어줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 알고리즘 시험 vs 실무 능력의
실제 상관관계와 한국 채용 트렌드를
솔직히 알려줘.

⭐ 이것만 기억하세요
알고리즘 수학 종합 이 3가지만 확실히 잡으세요
1.코딩 테스트 수학 5대 유형 — 빅오 분석·정렬+이진·DP·그래프·비트마스크
2.시간복잡도 즉시 판단 + 적합한 자료구조·알고리즘 선택이 시니어와 주니어를 가르는 능력
3.다음 모듈(확률·통계)에서 Z-test·베이즈 — A/B 테스트와 머신러닝의 수학적 기반


공유하기
진행도 33 / 45