동적 계획법 입문 — 메모이제이션과 점화식
같은 부분 문제를 반복 계산하는 낭비를 없애는 것이 동적 계획법이다. 피보나치 재귀가 왜 느린지에서 출발해 메모이제이션(top-down)과 타뷸레이션(bottom-up)의 차이, 상태 정의→점화식→초기값이라는 점화식 세우기 3단계, 코딩테스트에서 DP 문제를 알아보는 신호까지 실행 가능한 코드로 정리한다.
4개의 글
같은 부분 문제를 반복 계산하는 낭비를 없애는 것이 동적 계획법이다. 피보나치 재귀가 왜 느린지에서 출발해 메모이제이션(top-down)과 타뷸레이션(bottom-up)의 차이, 상태 정의→점화식→초기값이라는 점화식 세우기 3단계, 코딩테스트에서 DP 문제를 알아보는 신호까지 실행 가능한 코드로 정리한다.
그래프 탐색의 두 축 BFS와 DFS는 큐냐 스택이냐로 갈린다. 같은 그래프에 두 탐색을 돌려 순서 차이를 확인하고, BFS는 최단 거리·DFS는 백트래킹이라는 용도 구분, 방문 체크 시점과 재귀 깊이라는 코딩테스트 단골 함정까지 실행 가능한 코드로 정리한다.
정렬된 배열에서 후보를 매번 절반씩 지워 O(log n)에 찾는 이진 탐색. 동작 원리와 자주 틀리는 경계·오버플로 함정, 값이 없어도 위치를 찾는 lower/upper bound, 그리고 답을 직접 못 세는 문제를 이진 탐색으로 바꾸는 매개변수 탐색까지 정리한다.
프로그램의 빠르기는 실행 시간이 아니라 입력이 커질 때 연산이 늘어나는 속도로 잰다. Big-O가 무엇을 버리고 무엇을 남기는지, 대표 복잡도의 감, 같은 문제를 O(n²)에서 O(n)으로 줄이는 예제, 그리고 코딩테스트에서 입력 크기로 허용 복잡도를 어림하는 법까지 정리한다.
같은 부분 문제를 반복 계산하는 낭비를 없애는 것이 동적 계획법이다. 피보나치 재귀가 왜 느린지에서 출발해 메모이제이션(top-down)과 타뷸레이션(bottom-up)의 차이, 상태 정의→점화식→초기값이라는 점화식 세우기 3단계, 코딩테스트에서 DP 문제를 알아보는 신호까지 실행 가능한 코드로 정리한다.
그래프 탐색의 두 축 BFS와 DFS는 큐냐 스택이냐로 갈린다. 같은 그래프에 두 탐색을 돌려 순서 차이를 확인하고, BFS는 최단 거리·DFS는 백트래킹이라는 용도 구분, 방문 체크 시점과 재귀 깊이라는 코딩테스트 단골 함정까지 실행 가능한 코드로 정리한다.
정렬된 배열에서 후보를 매번 절반씩 지워 O(log n)에 찾는 이진 탐색. 동작 원리와 자주 틀리는 경계·오버플로 함정, 값이 없어도 위치를 찾는 lower/upper bound, 그리고 답을 직접 못 세는 문제를 이진 탐색으로 바꾸는 매개변수 탐색까지 정리한다.
프로그램의 빠르기는 실행 시간이 아니라 입력이 커질 때 연산이 늘어나는 속도로 잰다. Big-O가 무엇을 버리고 무엇을 남기는지, 대표 복잡도의 감, 같은 문제를 O(n²)에서 O(n)으로 줄이는 예제, 그리고 코딩테스트에서 입력 크기로 허용 복잡도를 어림하는 법까지 정리한다.
비공개로 의견 보내기
작성자에게만 전달돼요. 이름·이메일을 비우면 완전 익명입니다.