오류 신고하기

글쓴이와 여러 리뷰어들이 오랜 시간을 거쳐 리뷰했지만, 1000쪽이 넘는 긴 책이다 보니 오류가 많을 수밖에 없습니다. 오류를 찾으셨을 경우 jongman@gmail.com으로 쪽수와 틀린 내용을 적어 메일주세요.

정오표 (1 ~ 7쇄)

장절 쪽수 틀린 내용
9.8 301 '반면 최대치를 반환하는 next가 하나 이상 있다면' => '반면 최대치를 반환하는 next가 둘 이상 있다면' (제보자: 김강산)

정오표 (1 ~ 6쇄)

장절 쪽수 틀린 내용
2.3 30 '이때 사탕을 가장 많이 받은 어린이가 가장 적게 받은 어린이에게 사탕을 하나 준다고 해도 사탕의 총량이 역전되지 않습니다. 그러면 이 둘이 가진 사탕의 양의 차이는 항상 감소합니다.' => '이때 사탕을 가장 많이 받은 어린이가 가장 적게 받은 어린이에게 사탕을 하나 준다면 이 둘이 가진 사탕의 양의 차이는 항상 감소합니다.' (제보자: 정우영)
4.7 121 '이때 25603은 대략 16억입니다.' => 160억, '1초에 수행할 수 있는 반복문의 수행 횟수가 알고리즘 간에 최대 열 배까지' => 100배 (제보자: 김형민)
19.7 639 그림 19.4 (d)에서 굵은 선으로 표시된 구간은 짙게 표시되면 안됩니다. 고쳐진 그림 (제보자: 서성준)
20.2 651 전체 수행 회수 => 전체 수행 횟수 (제보자: 김진)
20.5 671 코드 20.12에서 ret += s.size() - a[i] - cp; 보다 ret += n - a[i] - cp;가 의도를 더 잘 표현합니다. (제보자: 김무성)
32.8 1019 코드 32.5의 주석에서 // b가 매칭되어 있지 않다면 bMatch[b]에서부터 시작해.. => // b가 이미 매칭되어 있다면 bMatch[b]에서부터 시작해.. (제보자: 양동혁)

정오표 (2 ~ 6쇄)

장절 쪽수 틀린 내용
32.2 996 코드 32.1의 너비 우선 탐색에서 while(!q.empty() && parent[sink] == -1) 줄의 맨 뒤에 중괄호 ({)가 빠졌습니다. 그리고 그 4줄 밑의 if(capacity[here][there]... 줄과 해당 블럭은 들여쓰기 되어야 합니다. (제보자: 김진)

정오표 (3 ~ 6쇄)

장절 쪽수 틀린 내용
30.2 930 코드 30.2의 5번째 줄에 visited[src] = true;visited[src] = false;여야 합니다. (제보자: 한정욱, 김이수, 이우람, 황인기)

정오표 (1 ~ 5쇄)

장절 쪽수 틀린 내용
30.11 951 코드 30.5의 주석에서 "완화가 성공한다면 here와 there은 모두 음수 사이클에 들어 있다" => "완화가 성공한다면 here는 음수 사이클에 들어 있다" (제보자: 최길웅)
31.7 989 코드 31.8에 오류가 있습니다. (제보자: 김이수)
32.2 999 "잔여 용량이 1이라도 있다면 반대쪽 정점 또한 T에 포함되어야 하기 때문이지요" => "잔여 용량이 1이라도 있다면 반대쪽 정점 또한 S에 포함되어야 하기 때문이지요" (제보자: 이시영)

정오표 (1, 2, 3, 4쇄)

장절 쪽수 틀린 내용
14.2 499 "sieve()를 실행한 후에는" => "eratosthenes()를 실행한 후에는" (제보자: 임윤경)
30.5 934 "입력의 마지막 두 줄에는" => "각 테스트 케이스의 마지막 두 줄에는"

다시 쓴 부분 (1쇄, 2쇄)

장절 쪽수 틀린 내용
2.3 30 사탕 나눠주기 문제의 해법이 부족한 점이 많아 정정합니다.

정오표 (1, 2, 3쇄)

장절 쪽수 틀린 내용
11.2 410 코드 11.3의 search() 함수 내에, for문이 시작되기 전에도 생략된 코드가 있습니다. (제보자: infoefficiency)
13.7 491 '인접한두' => '인접한 두'
13.7 492 '아래 껍질의 선분을 순회하며 최대 x 좌표를 찾는다.' => '최대 y좌표' (제보자: siscos)
15.11 559 24장에서 다루는 펜윅 트리 => 24장에서 다루는 구간 트리
25.3 779 buf.find(node) => buf.parent[node] 로 정정해야 컴파일 오류가 나지 않습니다. (제보자: 천민호)
28.7 859 "한 SCC에 속한두 정점 사이를" => "한 SCC에 속한 두 정점 사이를"
28.10 869 MEETINGROOM 문제에서 세 번째 예제의 출력은 POSSIBLE / 2 5 / 8 10 / 11 12입니다. (/는 줄바꿈) (제보자: 천민호)
29.5 897 코드 29.5의 주석에서 회색 정점 i는 i~2n-1로 표현한다 => 회색 정점 i는 n~2n-1로 표현한다 (제보자: 박찬제)
28.10 860 Tarjan의 강결합 컴포넌트 분리 알고리즘의 유도와 구현이 잘못되었습니다. (제보자: Signin)
30.16 966 '경우할 수 있는 정점' => '경유할 수 있는 정점' (제보자: 김진솔)
31.7 988 '마지막에 경로를 찾은 하한을 기억해 뒀다가' => '마지막에 경로를 찾은 상한을 기억해 뒀다가' (제보자: 김진솔)
32.2 998 'T에서 S로 흘러오는 (c, d) 간선의 유량은' => 'T에서 S로 흘러오는 (c, b) 간선의 유량은' (제보자: 김진솔)

정오표 (2쇄)

장절 쪽수 틀린 내용
17.3 606 코드 17.4의 ret = (ret + ((count[i] * (count[i-1] - 1)) / 2)) % MOD;ret = (ret + ((count[i] * (count[i] - 1)) / 2)) % MOD;로 바뀌어야 합니다. (제보자: 박찬제)

정오표 (1, 2쇄)

장절 쪽수 틀린 내용
2.3 37,38 모든 칸의 불을 끄는 문제가 아니라 모든 불을 켜는 문제입니다. (제보자: 진태훈)
6.7 165 페이지 하단의 그림 6.6은 전부 6.4로 바뀌어야 합니다. (제보자: 나선진)
8.10 246 "U의 크기가 100인 경우에만도 $ \left ( 1000 \atop 100 \right ) $" => "U의 크기가 10인 경우에만도 $ \left ( 1000 \atop 10 \right ) $" (제보자: precisely)
8.11 258 페이지 하단부 수식의 각 줄 끝에 괄호가 중복되어 있습니다. 올바른 수식은 $climb2(days, climbed) = 0.75 \times climb2(days + 1, climbed + 1) + 0.25 \times climb2(days + 1, climbed + 2)$ 입니다. (제보자: 김연승)
8.17 276 'here로 올 확률은 search3(here, days-1)에' => 'here로 올 확률은 search3(there, days-1)에' (제보자: 이승현)
9.15 331 "사전 순으로 가장 앞에 오는 답을 찾기" => "실제 문제의 답인 문자열을 찾기"
9.16 332 코드 9.19 주석, "recover()가 최소 값을 반환한" => "restore()가 최대 값을 반환한" (제보자: 박찬제, 신동화)
9.21 353 반환된 행렬과 $C_0$을 직접 곱할 필요 없이 => $C_1$ (제보자: 서승현)
9.23 358 $n$의 최대치가 10억 => $m$의 최대치가 10억 (제보자: 박찬제)
18.3 614 "동작 배열" => "동적 배열" (제보자: 이정석)
18.3 615 사각형으로 표현된 원소과 포인터들 => 사각형으로 표현된 원소와 포인터들 (제보자: 서승현)
19.7 639 ITES 문제의 예제 답안에 오류가 있습니다. 자세히 보기 (제보자: precisely)
28.6 843 "한 단어의 마지막 글자가 다른 단어의 마지막첫 글자와 같다면.." (제보자: 이정석)
28.11 878 isTrue = vertex % 2; => isTrue = vertex % 2 == 0; (제보자: 이호태)
29.7 913 하노이의 탑 문제의 예제 입력은 다음과 같아야 합니다. (제보자: 이정석)
30.2 922 우선 순위 큐에 이미 들어 있는 $(9, c)$는 어떻게 할까요? => $(12, c)$ (제보자: H.D. Moon)
30.14 963 solve 함수의 첫 번째 for문에 들여쓰기가 되어 있지 않습니다.
30.14 963 코드 30.9의 solve위에 다음 주석을 추가해야 합니다. "입력을 받을 때 1부터 시작하는 정점 번호를 0부터 시작하도록 변경했다고 가정한다." (제보자: 이정석)
30.15 965 선거 공약 문제의 예제 입력은 다음과 같아야 합니다. 또한, 입력 설명에서 $a$, $b$의 범위는 $0 \le a, b < V$입니다. (제보자: 이정석)

정오표 (1쇄)

장절 쪽수 틀린 내용
2.3 29 '선거 공약' 문제의 ID는 PROMISE입니다. (제보자: 김동규)
2.3 34 '너드인가, 너드가 아닌가?' 문제의 ID는 NERDS입니다. (제보자: 김동규)
3.5 68 "32비트 부호 없는 정수를 사용할 경우 오버플로가 발생하여" => "32비트 부호 있는 정수를 사용할 경우 오버플로가 발생하여" (제보자: 유영준)
3.6 72 코드 3.4의 주석에서 x * 1.0 / x == x인 수가 아니라 x * 1.0 / x == 1인 수를 세는 것입니다. (제보자: 이도경)
4.3 96 두번째 단락 첫번째 줄의 "어떻게 하면 이 프로그램을 좀더 빨리 짤 수 있는지" => "어떻게 하면 좀 더 빠른 프로그램을 짤 수 있는지" (제보자: 김동규)
7.1 177 fastSum의 식은 $fastSum(n) = 2 \times fastSum \left ( \frac{n}{2} \right ) + \frac {n^2}{4}$ 입니다. (제보자: 박찬제)
7.1 184 코드 7.3의 normalize에서 if(num.back() == 0) num.pop_back(); => while(num.size() > 1 && num.back() == 0) num.pop_back(); (제보자: 신기정)
7.1 189 카라츠바 알고리즘의 병합 단계에 드는 시간 $n \times \sum_{i=0}^{\lg n} \left ( \frac {3}{2} \right ) ^ {i}$은 $n^{\lg 3}$보다 훨씬 느리게 증가하는 것이 아니라 같은 속도로 증가합니다. (제보자: 신기정)
7.6 202 팬미팅(FANMEETING) 문제의 제한 시간은 10초입니다.
8.4 235 $C[]$는 단조 증가가 아니라 순증가합니다. (제보자: sjw0687)
8.7 241 "원주율 외우기" 문제의 비고에서 {12674, 939} => {12673, 939} (제보자: 하광성)
8.10 247 가운데 예제에서 집합 {1,4,6}을 표현하는 가장 오차가 작은 정수는 4입니다. {744, 755, 777}을 가장 오차 작게 표현하는 정수는 759입니다. (제보자: 장재현)
8.11 249 $psum[b] - psum[a]$ 식의 오른쪽 끝은 $\sum_{i=a}^{b}A[i]$ 입니다. (제보자: 하광성)
9.4 287 광학 문자 인식(OCR) 문제에서 입력에 주어지는 모든 단어의 길이는 10 이하입니다.
9.6 295 소제목 "모든 신호 만들기" => "k-1개 건너뛰기"
10.3 379 수식 $e_{p[x]} \ge e_{p[x]}$ => $e_{p[x]} \ge e_{p[y]}$ (제보자: 장윤석)
10.7 391 그림 10.6(b)에서 ${r}\atop{2}$ => $\frac{r}{2}$
11.8 440 코드 11.12의 int l = setSize(set), s = setSum(set);에서 각각 getSize(), getSum()이 맞습니다. (제보자: zzapcoder)
13.5 483 "이때 0번 선수의 기록을 $cheater(r)$ .." => "이때 $n-1$번 선수의 기록을 $cheater(r)$ .." (제보자: 장윤석)
14.4 504 67500의 소인수 분해 결과는 $2^2 \cdot 3^3 \cdot 5^4$입니다. (제보자: 송재원)
15.5 539 코드 15.8의 reflect()에는 here 입력이 필요 없습니다. (제보자: zzapcoder)
17.3 604 수식 $psum[K] = \left ( \sum_{j=0}^{i}D[j] \right )$ mod $K$의 $psum[K]$는 $psum[i]$로 바뀌어야 합니다. (제보자: 장재현)
17.3 606 코드 17.4의 ret += ((count[i] * (count[i] - 1)) / 2) % MODret = (ret + ((count[i] * (count[i] - 1)) / 2)) % MOD;로 바뀌어야 합니다. (제보자: 김재겸)
20.5 666 코드 20.9의 Comparator 클래스 생성자를 Comparator(const vector<int>& _group, int _t): group(_group), t(_t) {}로 변경해야 컴파일됩니다. (제보자: 이도경)
24.8 760 코드 24.8, 24.9에 문제의 이름이 잘못 적혀 있습니다. (제보자: zzapcoder)
28.6 847 단어 제한 끝말잇기 해법의 오류에 관하여 (제보자: 이현종)
28.7 856 코드 28.9 가운데의 주석 "그 번호가 자기 자신 이하라면 현재 위치는 절단점!" 은 "그 노드가 자기 자신 이하에 있다면 현재 위치는 절단점!" 으로 쓰는 것이 더 이해하기 쉽습니다. (제보자: 박찬제)
28.10 869 세 번째 예제 입력을 다음으로 정정합니다. 3 / 2 5 6 9 / 1 3 8 10 / 4 7 11 12 (/ 는 줄바꿈 표시) (제보자: 장윤석)
32.2 996 코드 32.1의 너비 우선 탐색에서 while(!q.empty()) 대신 while(!q.empty() && parent[sink] == -1)을 사용하면 훨씬 빨라집니다. (제보자: 이태윤)

마지막 업데이트: 2013년 5월 7일