실전 대비 C 알고리즘 인터뷰
더북(TheBook)

실전 대비 C 알고리즘 인터뷰

코딩 인터뷰 대비 최적의 문제 해결법!

코딩 인터뷰를 준비하는 사람을 대상으로 한다. 앞부분에서는 여러 가지 자료 구조와 알고리즘에 대한 복잡도를 분석하고 뒷부분에서는 다양한 알고리즘 기법을 다룬다. 또한, 각 주제에 맞춰 문제와 해결책을 제시하며, 연습 문제를 통해 완전히 이해하고 있는지 확인하게 한다. C 언어로 해결책을 제시하지만, C 언어가 친숙하지 않더라도 구조체, 함수, 배열, 포인터, 재귀의 개념을 안다면 읽는 데 무리가 없다.

«실전 대비 C 알고리즘 인터뷰»는 1~3장을 공개합니다.

목차

  • 1부 코딩 인터뷰를 위한 기본 개념 익히기
  • 1장 알고리즘 분석
  • 1.1 점근적 분석
  • 1.1.1 빅오 표기법
  • 1.1.2 오메가 표기법
  • 1.1.3 세타 표기법
  • 1.2 알고리즘 복잡도 분석
  • 1.2.1 시간 복잡도
  • 1.2.2 알고리즘의 함수 실행 시간 도출
  • 1.3 시간 복잡도 예제
  • 1.4 마스터 정리
  • 1.5 배열 기반 문제
  • 1.5.1 배열의 합 구하기
  • 1.5.2 순차 검색
  • 1.5.3 이진 검색
  • 1.5.4 k 위치만큼 배열 회전하기
  • 1.5.5 합이 최대인 부분 배열 찾기
  • 1.5.6 배열로 파형 그리기
  • 1.5.7 인덱스 배열
  • 1.5.8 1에서 n까지 정렬하기
  • 1.5.9 누락된 가장 작은 양수 찾기
  • 1.5.10 최대-최소 배열
  • 1.5.11 최대 합 구하기
  • 1.5.12 배열 인덱스의 최대 차이 구하기
  • 1.5.13 최대 경로 합
  • 1.6 재귀 함수
  • 1.6.1 팩토리얼
  • 1.6.2 16진수 출력
  • 1.6.3 하노이의 탑
  • 1.6.4 최대 공약수
  • 1.6.5 피보나치 수
  • 1.6.6 정수 배열의 순열
  • 1.6.7 재귀적 이진 검색
  • 연습 문제
  • 2장 알고리즘 문제를 풀기 위한 접근법
  • 2.1 제약 조건 분석
  • 2.2 아이디어 구상
  • 2.2.1 문제 간단하게 만들기
  • 2.2.2 몇 가지 예제 시도하기
  • 2.2.3 적합한 자료 구조 생각하기
  • 2.3 복잡도 계산
  • 2.4 코딩
  • 2.5 테스트
  • 2.6 코딩 인터뷰 예시
  • 2.7 정리
  • 3장 추상 자료형과 자료 구조
  • 3.1 추상 자료형
  • 3.2 자료 구조
  • 3.3 배열
  • 3.4 연결 리스트
  • 3.5 스택
  • 3.6 큐
  • 3.7트리
  • 3.7.1 이진 트리
  • 3.8 힙(우선순위 큐)
  • 3.9 해시 테이블
  • 3.10 딕셔너리와 심볼 테이블
  • 3.10.1 문자열용 이진 탐색 트리
  • 3.10.2 문자열용 해시 테이블
  • 3.11 그래프
  • 3.11.1 깊이 우선 탐색
  • 3.11.2 너비 우선 탐색
  • 3.12 정렬
  • 3.12.1 카운트 정렬
  • 3.13 정리
  • 4장 정렬
  • 4.1 정렬 유형
  • 4.1.1 버블 정렬
  • 4.1.2 향상된 버블 정렬
  • 4.1.3 삽입 정렬
  • 4.1.4 선택 정렬
  • 4.1.5 병합 정렬
  • 4.1.6 퀵 정렬
  • 4.1.7 퀵 선택
  • 4.1.8 버킷 정렬
  • 4.1.9 일반화된 버킷 정렬
  • 4.1.10 힙 정렬
  • 4.1.11 트리 정렬
  • 4.1.12 외부 정렬
  • 4.1.13 안정 정렬
  • 4.2 정렬 알고리즘 비교
  • 4.3 정렬 문제
  • 4.3.1 0과 1 나누기
  • 4.3.2 0, 1, 2 나누기
  • 4.3.3 범위 나누기
  • 4.3.4 최소 교환 횟수 구하기
  • 4.3.5 절댓값으로 정렬하기
  • 4.3.6 수식으로 정렬하기
  • 4.3.7 배열에서 짝수와 홀수 나누기
  • 4.3.8 배열 축소하기
  • 4.3.9 배열 병합하기
  • 4.3.10 뒤집기로 배열 정렬하기
  • 4.3.11 합집합과 교집합 구하기
  • 연습 문제
  • 5장 검색
  • 5.1 왜 검색일까
  • 5.2 검색 알고리즘의 종류
  • 5.2.1 선형 검색
  • 5.2.2 이진 검색
  • 5.2.3 정렬이 선택 알고리즘에서 얼마나 유용한가
  • 5.3 검색 문제
  • 5.3.1 첫 번째 중복 원소 찾기
  • 5.3.2 중복 값 출력하기
  • 5.3.3 중복 값 삭제하기
  • 5.3.4 누락 값 찾기
  • 5.3.5 최솟값, 최댓값, 누락 값 찾기
  • 5.3.6 홀수 번 나타나는 원소 찾기
  • 5.3.7 홀수 번 나타나는 모든 원소 찾기
  • 5.3.8 고윳값의 합 구하기
  • 5.3.9 합이 0에 가까운 두 원소 찾기
  • 5.3.10 조건에 맞는 두 원소 찾기
  • 5.3.11 두 개의 배열에서 조건에 맞는 원소 쌍 찾기
  • 5.3.12 차가 주어진 값과 같은 원소 쌍 찾기
  • 5.3.13 최소 차 원소 쌍 찾기
  • 5.3.14 두 개의 배열에서 최소 차의 원소 쌍 찾기
  • 5.3.15 최소 합 원소 쌍 찾기
  • 5.3.16 주어진 값과 합이 가장 가까운 원소 쌍 찾기
  • 5.3.17 합이 나머지 원소의 합과 같은 두 원소 찾기
  • 5.3.18 합이 0인 세 원소 찾기
  • 5.3.19 합이 주어진 값과 같은 세 원소 찾기
  • 5.3.20 A + B = C인 세 원소 찾기
  • 5.3.21 합이 주어진 값보다 작은 세 원소 찾기
  • 5.3.22 등차수열 원소 찾기
  • 5.3.23 등비수열 원소 찾기
  • 5.3.24 삼각형 개수 구하기
  • 5.3.25 최빈값 찾기
  • 5.3.26 과반 출현 빈도 원소 찾기
  • 5.3.27 정렬된 배열에서 과반 빈도 원소 찾기
  • 5.3.28 최소 비교로 배열에서 두 번째로 큰 수 찾기
  • 5.3.29 배열의 중간값 찾기
  • 5.3.30 바이토닉 배열에서 최댓값 찾기
  • 5.3.31 바이토닉 배열에서 원소 검색하기
  • 5.3.32 정렬된 배열에서 출현 빈도 구하기
  • 5.3.33 주식 매매 문제
  • 5.3.34 두 개의 정렬된 배열에서 중간값 찾기
  • 5.3.35 0과 1로 된 배열 검색하기
  • 5.3.36 회전된 배열에서 최댓값 찾기
  • 5.3.37 회전된 배열에서 최댓값의 인덱스 찾기
  • 5.3.38 회전 횟수 구하기
  • 5.3.39 정렬된 회전 목록에서 원소 찾기
  • 5.3.40 원형 배열에서 최소 절대차 구하기
  • 5.3.41 배열 변형하기
  • 5.3.42 두 배열이 서로 순열인지 확인하기
  • 5.3.43 정렬된 이차원 배열에서 원소 찾기
  • 5.3.44 등차수열 만들기
  • 5.3.45 균형점 찾기
  • 5.3.46 천장과 바닥 찾기
  • 5.3.47 가장 가까운 숫자 찾기
  • 5.3.48 지정 범위 내에서 중복 값 찾기
  • 5.3.49 빈도 구하기
  • 5.3.50 최대 원소 k개 찾기
  • 5.3.51 고정점 찾기
  • 5.3.52 부분 배열 구하기
  • 5.3.53 연속된 부분 배열의 최대합 구하기
  • 5.3.54 원소가 중복되지 않는 연속된 부분 배열의 최대합 구하기
  • 5.3.55 빗물의 양 구하기
  • 연습 문제
  • 2부 자료 구조
  • 6장 연결 리스트
  • 6.1 연결 리스트의 기본
  • 6.2 연결 리스트의 종류
  • 6.2.1 단일 연결 리스트
  • 6.2.2 이중 연결 리스트
  • 6.2.3 원형 연결 리스트
  • 6.2.4 이중 원형 연결 리스트
  • 6.3 연결 리스트 문제
  • 6.3.1 단일 연결 리스트 시작에 원소 삽입하기
  • 6.3.2 단일 연결 리스트 끝에 원소 삽입하기
  • 6.3.3 단일 연결 리스트 순회하기
  • 6.3.4 단일 리스트 생성 및 출력 코드 작성하기
  • 6.3.5 단일 연결 리스트에 정렬된 순서로 원소 삽입하기
  • 6.3.6 단일 연결 리스트의 원소 검색하기
  • 6.3.7 단일 연결 리스트의 첫 번째 원소 삭제하기
  • 6.3.8 단일 연결 리스트에서 특정 값의 노드 삭제하기
  • 6.3.9 단일 연결 리스트에서 특정 값의 모든 노드 삭제하기
  • 6.3.10 단일 연결 리스트 삭제하기
  • 6.3.11 단일 연결 리스트를 반복적으로 뒤집기
  • 6.3.12 단일 연결 리스트를 재귀적으로 뒤집기
  • 6.3.13 단일 연결 리스트에서 중복 삭제하기
  • 6.3.14 단일 연결 리스트를 역순으로 복사하기
  • 6.3.15 단일 연결 리스트를 다른 리스트로 복사하기
  • 6.3.16 단일 연결 리스트 비교하기
  • 6.3.17 단일 연결 리스트의 길이 구하기
  • 6.3.18 단일 연결 리스트의 시작에서 n번째 노드 찾기
  • 6.3.19 단일 연결 리스트의 끝에서 n번째 노드 찾기
  • 6.3.20 단일 연결 리스트에서 루프 찾기
  • 6.3.21 단일 연결 리스트에서 루프 유형 감지하기
  • 6.3.22 단일 연결 리스트에서 루프 삭제하기
  • 6.3.23 단일 연결 리스트에서 교차점 찾기
  • 6.3.24 이중 연결 리스트 머리에 원소 삽입하기
  • 6.3.25 이중 연결 리스트에 정렬된 순서로 원소 삽입하기
  • 6.3.26 이중 연결 리스트 머리에서 노드 삭제하기
  • 6.3.27 이중 연결 리스트에서 원소 삭제하기
  • 6.3.28 이중 연결 리스트에서 중복 삭제하기
  • 6.3.29 이중 연결 리스트를 반복적으로 뒤집기
  • 6.3.30 이중 연결 리스트를 뒤집어 복사하기
  • 6.3.31 이중 연결 리스트 복사하기
  • 6.3.32 이중 연결 리스트 검색하기
  • 6.3.33 이중 연결 리스트 해제하기
  • 6.3.34 이중 연결 리스트 출력하기
  • 6.3.35 이중 연결 리스트의 길이 구하기
  • 6.3.36 이중 연결 리스트 비교하기
  • 6.3.37 원형 연결 리스트 머리에 원소 삽입하기
  • 6.3.38 원형 연결 리스트 꼬리에 원소 삽입하기
  • 6.3.39 원형 연결 리스트 검색하기
  • 6.3.40 원형 연결 리스트 출력하기
  • 6.3.41 원형 연결 리스트의 첫 번째 원소 삭제하기
  • 6.3.42 원형 연결 리스트에서 특정 값의 노드 삭제하기
  • 6.3.43 원형 연결 리스트 삭제하기
  • 6.3.44 이중 원형 연결 리스트 머리에 원소 삽입하기
  • 6.3.45 이중 원형 연결 리스트 꼬리에 원소 삽입하기
  • 6.3.46 이중 원형 연결 리스트의 머리에서 노드 삭제하기
  • 6.3.47 이중 원형 연결 리스트의 꼬리에서 노드 삭제하기
  • 6.3.48 이중 원형 연결 리스트 삭제하기
  • 6.3.49 이중 원형 연결 리스트의 원소 검색하기
  • 6.3.50 이중 원형 연결 리스트 출력하기
  • 연습 문제
  • 7장 스택
  • 7.1 스택의 추상 자료형
  • 7.2 시스템 스택과 함수 호출
  • 7.3 배열로 스택 구현하기
  • 7.3.1 동적 메모리 할당 구현하기
  • 7.3.2 용량 증가 구현하기
  • 7.3.3 용량 감소 구현하기
  • 7.4 연결 리스트로 스택 구현하기
  • 7.5 스택 문제
  • 7.5.1 정렬해 삽입하기
  • 7.5.2 스택 정렬하기
  • 7.5.3 바닥에 삽입하기
  • 7.5.4 스택 뒤집기
  • 7.5.5 스택에서 k개 원소 뒤집기
  • 7.5.6 큐 뒤집기
  • 7.5.7 큐에서 k개 원소 뒤집기
  • 7.5.8 하나의 리스트로 스택 두 개 구현하기
  • 7.5.9 최소 스택
  • 7.5.10 큐로 스택 구현하기
  • 7.5.11 균형 괄호 찾기
  • 7.5.12 괄호의 최대 깊이 구하기
  • 7.5.13 가장 긴 연속 균형 괄호 찾기
  • 7.5.14 괄호 뒤집기
  • 7.5.15 중복 괄호 찾기
  • 7.5.16 괄호 번호 출력하기
  • 7.5.17 중위 표기, 전위 표기, 후위 표기
  • 7.5.18 스택 기반 거부
  • 7.5.19 재귀를 사용하는 격자 기반 문제
  • 7.5.20 뱀과 사다리 문제
  • 7.5.21 팰린드롬 문자열
  • 7.5.22 유명인 찾기
  • 7.5.23 그 외 스택 사용
  • 연습 문제
  • 8장 큐
  • 8.1 큐의 추상 자료형
  • 8.2 배열로 큐 구현하기
  • 8.3 연결 리스트로 큐 구현하기
  • 8.3.1 삽입하기
  • 8.3.2 삭제하기
  • 8.4 큐 문제
  • 8.4.1 스택으로 큐 구현하기
  • 8.4.2 큐로 스택 구현하기
  • 8.4.3 스택 뒤집기
  • 8.4.4 큐 뒤집기
  • 8.4.5 너비 우선 탐색 구현하기
  • 8.4.6 요세푸스(Josephus) 문제
  • 8.4.7 순환 투어 찾기
  • 8.4.8 XY 변환하기
  • 8.4.9 슬라이딩 윈도의 최댓값 찾기
  • 8.4.10 슬라이딩 윈도의 최댓값 중 최솟값 찾기
  • 8.4.11 슬라이딩 윈도의 최솟값 중 최댓값 찾기
  • 8.4.12 슬라이딩 윈도의 첫 번째 음수 찾기
  • 연습 문제
  • 9장 트리
  • 9.1 트리의 기본
  • 9.2 이진 트리
  • 9.3 이진 트리의 유형
  • 9.3.1 완전 이진 트리
  • 9.3.2 정 이진 트리
  • 9.3.3 포화 이진 트리
  • 9.3.4 우편향 이진 트리
  • 9.3.5 좌편향 이진 트리
  • 9.3.6 높이 균형 이진 트리
  • 9.4 이진 트리 문제
  • 9.4.1 완전 이진 트리 만들기
  • 9.4.2 전위 순회하기
  • 9.4.3 후위 순회하기
  • 9.4.4 중위 순회하기
  • 9.4.5 레벨 순서 순회하기
  • 9.4.6 재귀와 시스템 스택을 사용하지 않는 깊이 우선 탐색하기
  • 9.4.7 줄 단위로 레벨 순서 순회하기
  • 9.4.8 나선형으로 트리 출력하기
  • 9.4.9 전위 순회의 n번째 노드 출력하기
  • 9.4.10 후위 순회의 n번째 노드 출력하기
  • 9.4.11 중위 순회의 n번째 노드 출력하기
  • 9.4.12 모든 경로 출력하기
  • 9.4.13 노드 수 구하기
  • 9.4.14 모든 노드의 합 구하기
  • 9.4.15 단말 노드의 수 구하기
  • 9.4.16 이진 트리에서 자식 노드가 둘인 노드의 수 구하기
  • 9.4.17 특정 값 찾기
  • 9.4.18 최댓값 찾기
  • 9.4.19 트리의 깊이 구하기
  • 9.4.20 최대 길이의 경로 구하기
  • 9.4.21 최소 공통 조상 찾기
  • 9.4.22 같은 트리인지 확인하기
  • 9.4.23 트리 복사하기
  • 9.4.24 트리 거울 복사하기
  • 9.4.25 트리 해제하기
  • 9.4.26 완전 이진 트리인지 확인하기
  • 9.4.27 힙인지 확인하기
  • 9.4.28 재귀를 사용하지 않고 전위 순회하기
  • 9.4.29 재귀를 사용하지 않고 후위 순회하기
  • 9.4.30 재귀를 사용하지 않고 중위 순회하기
  • 9.4.31 트리를 리스트로 만들기
  • 9.5 이진 탐색 트리
  • 9.6 이진 탐색 트리 문제
  • 9.6.1 정렬된 배열로 이진 탐색 트리 생성하기
  • 9.6.2 노드 삽입하기
  • 9.6.3 노드 찾기
  • 9.6.4 최솟값 노드 찾기
  • 9.6.5 최댓값 노드 찾기
  • 9.6.6 이진 탐색 트리인지 확인하기
  • 9.6.7 노드 삭제하기
  • 9.6.8 최소 공통 조상 찾기
  • 9.6.9 범위를 벗어난 노드 삭제하기
  • 9.6.10 범위 안의 노드 출력하기
  • 9.6.11 주어진 키로 천장과 바닥 값 찾기
  • 9.6.12 오른쪽의 작은 원소 수로 배열 만들기
  • 9.6.13 이진 탐색 트리의 배열인지 확인하기
  • 9.7 이진 트리의 확장
  • 9.7.1 세그먼트 트리
  • 9.7.2 AVL 트리
  • 9.7.3 레드-블랙 트리
  • 9.7.4 스플레이 트리
  • 9.7.5 B-트리
  • 9.7.6 B+ 트리
  • 9.7.7 B* 트리
  • 연습 문제
  • 10장 힙
  • 10.1 힙의 유형
  • 10.1.1 최대 힙
  • 10.1.2 최소 힙
  • 10.2 힙의 추상 자료형 연산
  • 10.3 힙 연산
  • 10.3.1 힙 생성하고 초기화하기
  • 10.3.2 삽입하기
  • 10.3.3 삭제하기
  • 10.4 힙 정렬하기
  • 10.5 힙을 사용하는 곳
  • 10.6 힙 문제
  • 10.6.1 최소 힙으로 k번째 작은 값 찾기
  • 10.6.2 최대 힙으로 k번째 큰 값 찾기
  • 10.6.3 무한한 수의 스트림에서 k번째 큰(작은) 값 찾기
  • 10.6.4 스트림에서 100번째 큰 값 찾기
  • 10.6.5 두 힙 합치기
  • 10.6.6 최소 힙인지 확인하기
  • 10.6.7 최대 힙인지 확인하기
  • 10.6.8 힙 순회하기
  • 10.6.9 최소 힙에서 임의 원소 삭제하기
  • 10.6.10 최소 힙에서 k번째 원소 삭제하기
  • 10.6.11 k개 작은 값 원소의 곱 구하기
  • 10.6.12 배열의 큰 절반 출력하기
  • 10.6.13 거의 정렬된 배열
  • 10.6.14 영약의 양 구하기
  • 10.6.15 밧줄 연결하기
  • 10.6.16 중간값 함수
  • 연습 문제
  • 11장 해시 테이블
  • 11.1 해시 테이블
  • 11.2 충돌 해결 기법
  • 11.2.1 개방 주소법
  • 11.2.2 개별 체이닝
  • 11.3 해싱 문제
  • 11.3.1 애너그램 찾기
  • 11.3.2 중복 제거하기
  • 11.3.3 누락된 숫자 찾기
  • 11.3.4 반복 숫자 출력하기
  • 11.3.5 첫 번째 반복 숫자 출력하기
  • 11.3.6 순서대로 정렬
  • 연습 문제
  • 12장 그래프
  • 12.1 그래프 용어
  • 12.2 그래프 구현 방법
  • 12.2.1 인접 행렬
  • 12.2.2 인접 리스트
  • 12.3 그래프 순회
  • 12.3.1 깊이 우선 탐색
  • 12.3.2 너비 우선 탐색
  • 12.3.3 BFS와 DFS 사용 방법
  • 12.3.4 최소 신장 트리
  • 12.3.5 그래프에서 최단 경로 알고리즘
  • 12.4 그래프 문제
  • 12.4.1 u에서 v까지의 경로 찾기
  • 12.4.2 그래프에서 순환 찾기
  • 12.4.3 색깔 메서드로 그래프에서 순환 찾기
  • 12.4.4 무방향 그래프에서 순환 찾기
  • 12.4.5 그래프 뒤집기
  • 12.4.6 무방향 그래프의 연결 확인하기
  • 12.4.7 방향 그래프의 연결 확인하기
  • 12.4.8 강한 연결 그래프인지 확인하기
  • 12.4.9 강한 연결 요소 찾기
  • 12.4.10 루트 정점 찾기
  • 12.4.11 노드 레벨 구하기
  • 12.4.12 출발과 목적지 사이 거리 구하기
  • 12.4.13 전이 폐쇄 만들기
  • 12.4.14 모든 경로 수 세기
  • 12.4.15 모든 경로 출력하기
  • 12.4.16 해밀턴 경로와 해밀턴 회로 찾기
  • 12.4.17 오일러 경로와 오일러 회로 찾기
  • 12.4.18 순회 영업 사원 문제
  • 연습 문제
  • 3부 고급 알고리즘
  • 13장 문자열 알고리즘
  • 13.1 문자열 일치
  • 13.2 심볼 테이블과 딕셔너리
  • 13.2.1 문자열의 이진 탐색 트리
  • 13.2.2 해시 테이블
  • 13.2.3 트라이
  • 13.2.4 3진 검색 트라이와 3진 검색 트리
  • 13.3 문자열 문제
  • 13.3.1 정규 표현식 일치
  • 13.3.2 순서 일치
  • 13.3.3 정숫값을 표현하는 문자열을 정수로 변환하기
  • 13.3.4 유일한 문자
  • 13.3.5 대문자로 변환하기
  • 13.3.6 소문자로 변환하기
  • 13.3.7 순열 확인하기
  • 13.3.8 팰린드롬 확인하기
  • 13.3.9 정수를 문자열로 변환하기
  • 13.3.10 문자열 복사하기
  • 13.3.11 거듭제곱하기
  • 13.3.12 문자열 비교하기
  • 13.3.13 문자열 복제하기
  • 13.3.14 문자열 뒤집기
  • 13.3.15 단어 뒤집기
  • 13.3.16 애너그램 출력하기
  • 13.3.17 문자열 섞기
  • 13.3.18 이진 덧셈하기
  • 13.3.19 문자열에서 공백 제거하기
  • 연습 문제
  • 14장 알고리즘 설계 기법
  • 14.1 무차별 대입 알고리즘
  • 14.2 탐욕 알고리즘
  • 14.3 분할 정복과 부분 정복
  • 14.4 동적 계획법
  • 14.5 변환 정복
  • 14.6 백트래킹
  • 14.7 분기 한정
  • 14.8 A* 알고리즘
  • 14.9 정리
  • 15장 무차별 대입 알고리즘
  • 15.1 버블 정렬
  • 15.2 선택 정렬
  • 15.3 순차 검색
  • 15.4 pow(a, n) 계산하기
  • 15.5 문자열 일치
  • 15.6 가장 가까운 두 점의 무차별 대입 알고리즘
  • 15.7 볼록 껍질 문제
  • 15.8 완전 탐색
  • 15.8.1 순회 영업 사원 문제
  • 15.8.2 배낭 문제
  • 15.9 정리
  • 16장 탐욕 알고리즘
  • 16.1 동전 교환 문제
  • 16.2 최소 신장 트리
  • 16.2.1 프림 알고리즘
  • 16.2.2 크루스칼 알고리즘
  • 16.3 단일 출발 최단 경로의 데이크스트라 알고리즘
  • 16.4 최적 인코딩을 위한 허프만 트리
  • 16.5 작업 선택 문제
  • 16.6 배낭 문제
  • 16.6.1 분할 가능한 배낭 문제
  • 16.6.2 0/1 배낭 문제
  • 17장 분할 정복과 부분 정복
  • 17.1 일반 분할 정복의 반복
  • 17.2 병합 정렬
  • 17.3 퀵 정렬
  • 17.4 외부 정렬
  • 17.5 이진 검색
  • 17.6 제곱 함수
  • 17.7 볼록 껍질
  • 17.8 가장 가까운 두 점
  • 18장 동적 계획법
  • 18.1 피보나치 수
  • 18.2 조립 라인 계획
  • 18.3 최장 증가 부분 수열
  • 18.4 최장 바이토닉 부분 수열
  • 18.5 연쇄 행렬 곱셈
  • 18.5.1 최적 하위 구조
  • 18.5.2 하위 문제 겹침
  • 18.6 최장 공통 부분 수열
  • 18.6.1 최적 하위 구조
  • 18.7 동전 교환 문제
  • 19장 백트래킹
  • 19.1 N 여왕 말 문제
  • 19.2 하노이의 탑
  • 20장 복잡도 이론
  • 20.1 결정 문제
  • 20.2 복잡도 클래스
  • 20.2.1 P 클래스 문제
  • 20.2.2 NP 클래스 문제
  • 20.2.3 co-NP 클래스
  • 20.2.4 NP-난해
  • 20.2.5 NP-완전
  • 20.2.6 환원
  • 20.3 정리
  • 부록 A 시간 복잡도
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.