누워서 읽는 알고리즘
임백준 저
예스24 | 애드온2

백만년 만의 독서 포스팅. 읽고나서 한번 더 되새김질 하는 의미에서라도 앞으로 독서 포스팅도 최대한 열심히 하기로 새롭게 마음먹었다.

저자의 다른 책을 빌려보기 위해서 회사 도서관에 갔다가 우연히 이 책을 집어 들게 되었다.
책 분량이 많지 않고 제목 그대로 쉽게 읽혀지게 하기 위해서 쓰여진 책이라서 순식간에 다 읽어버렸다.
간단하게 읽어본 후의 평가를 말하자면 강추까지는 아니고 한번쯤 읽어볼만한 책 정도로 평하고 싶다. 점수를 주자면 A- 정도?

저자는 IT 분야에서 쉽고 재미있게 읽힐 수 있는 글들을 많이 쓰는 사람으로 유명하다. 저자의 약력을 보면 꽤 흥미로운데, 서울대 수학과를 졸업하고 졸업 후에 삼성 SDS 에서 프로그래밍을 처음 시작했다가 이후 회사를 그만두고 인디애나 주립대로 CS 석사 유학, 졸업 후 현재 미국 IT 기업체에서 근무중인 분이었다. 국내보다 근무환경이 좋은 해외 기업에서 근무하면서 "행복한 프로그래밍" 같은 책을 집필했다가 "국내 실정에 맞지 않는다" 는 이유로 몇몇 독자들의 원성을 하기도 햇다고 한다. ㅋ 

아시다시피 해외 IT 기업들은 알고리즘 퀴즈 및 코딩 면접으로 유명한데, 책 내용의 절반 정도는 저자가 IT 회사 인터뷰 면접때 받았던 질문과 해법에 대한 소개로 이루어져 있다.  

일단 알고리즘을 싫어하는 개발자들에게 알고리즘의 흥미를 불러 일으키게 하는 소재라든지,  프로그래머의 마음가짐 등을 잘 와닿게 알려주는 부분등은 매우 좋다. 사실 국내 IT 서적중에서 이런 식의 접근법을 취하는 책이 거의 없다는 점에서 알고리즘 수업을 듣는 학생들이 읽으면 매우 도움이 될 것 같은 내용도 많다. 하지만 N-Queen 이나 RSA 의 최적화에 대한 소스를 붙여넣고 설명을 하는 부분은 에러같았다. 쉽게 읽히도록 한다는 책의 방향과도 맞지 않고 소스에 대한 설명이 몇 페이지씩 장황하게 이어지니 가볍게 기술되던 앞 부분과 흐름이 많이 끊기는 느낌이다. 그리고 몇몇 알고리즘은 너무 수박 겉핡기 식으로 소개를 하고 넘어가서 ( 대표적으로 다이나믹 프로그래밍 ) 저자가 시간에 쫒기면서 집필한 흔적이 좀 보이기도 했다. 사실 소개하는 퀴즈 알고리즘 중에서 예전에 이미 접해본 내용들이라 흥미가 떨어져서 그냥 휙휙 페이지를 넘긴 부분도 적잖이 있긴 한다. 

둠스데이(Doomsday) 알고리즘이나 메르센느 소수 같은 이야기는 꽤 흥미로웠다. 이런 유형은 ACM- ICPC 문제들의 단골 소재로 등장했던 터라 익숙하기는 한데, 문제의 배경에 대해서 읽어보니 꽤 색다른 느낌이었다.  
( 둠스데이 알고리즘에 대해서는 네이버 케스트에서 이미 소개된 바 있군... )


저자의 경험담 위주로 쓰여진 면접 퀴즈들에 대해서도 재미있는 내용들이 꽤 있었다. 예를 들면 저자가 받았던 MS 본사 인터뷰 면접 문제로 이런게 있다. 링크드 리스트의 addNode 함수를 작성하게 한 후, 이 함수를 다 작성하자 면접관이 그 다음 문제로 addNode 함수의 파라미터를 이중 포인터로 바꾼 후에 함수 내용을 다시 고치라고 한 부분이라든지... (저자는 이 퀴즈를 못풀어서 MS 떨어진 거 같다고 썼음.)
팔린드롬(palindrome) 여부를 확인하는 코드 작성하기 등등.. 

책 내용 중에서 재미있고, 기억나는 퀴즈가 있어서 소개해 볼까 한다.

1. 임의의 원소들을 갖고있는 A 와 B 의 두 집합 (set) 이 있다. A 가 B 의 부분집합인지 여부를 확인하는 방법에 대해 설명하시오. ( 책에서는 세가지 해법을 소개했다. )

2. 물컵안에 물이 들어있다. 다른 어떠한 도구도 사용하지 않고 이 물컵의 물이 절반이 되는지를 확인하는 방법은 무엇일까? 
( 이 퀴즈는 비 프로그래밍 문제이지만 면접자의 재치와 면접자가 얼마나 영리한지를 보기 위한 퀴즈로 보인다. )

사실 이런 류의 면접은 어떤 알고리즘을 외우고 있다거나 특정 알고리즘을 구현할 줄 안다고 잘 볼 수 있는 면접은 아니라고 생각된다. 면접관이 원하는 것은 이런 퀴즈를 푸는 면접자를 관찰하면서 면접자가 얼마나 똑똑하고 프로그래머로서 기본기와 자질을 갖추고 있는지를 판단하기 위해서 이런 류의 압박 면접을 즐겨 한다고 생각된다. 요새는 국내 회사들도 코딩 면접을 포함해서 이런 류의 면접을 도입하는 회사가 늘고 있다고 하는데(N 모사 등.. ), 매우 바람직한 현상이라고 생각된다. ㅋ
이런 압박 면접에 관해서는 조엘 스폴스키의 "똑똑하고 100배 일잘하는 개발자 모시기" 라는 책에도 심도있게 언급하고 있다.

이 저자의 책이 3-4 권 정도 발간되었던데... 하나씩 찾아서 읽어볼까 생각중이다.


'여러가지 리뷰 > Book' 카테고리의 다른 글

[Book] 촘스키  (0) 2010.07.12
[Book] 뉴욕의 프로그래머  (0) 2010.06.26
[Book] 누워서 읽는 알고리즘  (4) 2010.06.09
[Book] 전설의 사원  (2) 2009.08.14
[Book] 도쿠가와 이에야스의 인간경영  (0) 2009.03.10
[Book] 한국형 가치투자 전략  (0) 2009.02.25
댓글을 달아주세요!
  1. 김훈동 2010.06.15 10:57 신고  댓글주소  수정/삭제  댓글쓰기

    ㅋㅋㅋㅋ... 내가 저번에 보여준... 뉴욕의 프로그래머 저자....
    나는 이 사람 마소 게제 글땜에 더 친숙했쥐...
    다음달부터 다시 마소를 회사에 정기구독해 달래서 다시 보기 시작하려고 해...
    대학원 들어가기 바로 전까지 보다가..대학원 들어가면서 끊었다가..이제 졸업앞두고 있으니 다시 봐야 겠다는 생각이 드네...

    마소에서 임백준 씨가 자기의 뉴욕 월스트리트 금융가에서의 금융권 IT 개발자로서의 수필같은 이야기를 많이 했었는데...
    뉴욕의 프로그래머가 그런 내용이 발전되서 약간 소설반 일기 반 글이 되었던 듯...

  2. BlogIcon hyperdash 2010.06.16 09:42 신고  댓글주소  수정/삭제  댓글쓰기

    역시 석사라 이런것도 계속 보는구나....

    1번은 수학문제라 패스

    2번은 알겠다.. ㅎㅎㅎ

  3. 김훈동 2010.06.17 13:16 신고  댓글주소  수정/삭제  댓글쓰기

    1번은... A의 원소를 정렬해놓고 B 의 원소도 정렬해놓고 A의 index 를 하나씩 증가해가며, B 의index 를 밑에서부터 scan 해 나가면
    A 의 길이가 N 이고 B 의 길이가 M 이면 최악의 경우에도 O(N+M) 에 확인 될듯 하고.. 근데 ACM 에서 이런류의 문제가 나오면 A원소 갯수만큼 for 문 돌면서 그안에서 B 의 포인터를 하나씩 늘려나가는 코딩을 하느니 B 원소를 Hashtable 에 다 넣고. A원소를 Hashtable 에다가 데고 containKey = true 인지 보는식으로 코딩해도 시간제한 안걸릴듯..

    2번은... 컵의 주둥이와 컵의 바닥 모서리가 지평면과 일치하게 45도 가량기울였을때 물이 그 주둥이와 바닥 모서리에 정확하게 걸치면 1/2
    일테고 넘치면 더 많을 거고 못미치면 1/2 보다 작은것이 되겠쥐...
    물론 컵이 높이가 긴 직사각형형태면 45도가 아니라 Cos각도 = 높이/대각선길이 만큼의 각도를 기울여야 되겠쥐..
    물의 수평면이 주둥이와 바닥모서리 선과 수평되게 하는거라 굳이 각도가 중요한 요소는 아닐테고...

    답이 맞을래나?

  4. BlogIcon mynotepad 2010.06.20 17:34 신고  댓글주소  수정/삭제  댓글쓰기

    오호...
    댓글들이 인기 폭팔이네 ㅋㅋ
    정답은 다음 글에서.. ;)

이름 암호 홈페이지