메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

똑똑한 코드 작성을 위한 실전 알고리즘

파이썬 예제로 문제 해결 전략 익히기

한빛미디어

번역서

판매중

  • 저자 : 조지 하이네만
  • 번역 : 윤대석
  • 출간 : 2022-05-20
  • 페이지 : 296 쪽
  • ISBN : 9791162245644
  • eISBN : 9791162245774
  • 물류코드 :10564
  • 초급 초중급 중급 중고급 고급
4.6점 (36명)
좋아요 : 17

더 효율적이고 창의적인 코드 작성을 위한 알고리즘 사용법

어려운 개념이나 수식 없이 그림과 예제로 학습하기

 

좀 더 똑똑한 코드로 프로그램 성능을 향상하고 싶다면 이 책을 펼쳐보자. 이 책은 소프트웨어 개발에서 가장 많이 활용되는 핵심 알고리즘을 각각 언제, 어떻게 사용하면 좋은지 단계별로 상세히 알려준다. 알고리즘 진행 과정을 시각화한 그림과 함께 예제 코드를 한 줄씩 알기 쉽게 설명하며, 성능을 직접 측정해볼 수 있도록 실행 가능한 코드를 제공한다. 장마다 수록한 연습 문제는 문제 해결 능력을 향상해 코딩 인터뷰를 준비하는 데도 도움이 된다.

전문 개발자뿐 아니라 자신의 연구 분야에 알고리즘을 적용하려는 사람 모두에게 유용하다. 컴퓨터 과학에 관한 배경지식이 없어도 프로그래밍 언어를 다뤄본 경험이 있으면 충분하다. 예제 설명과 샘플 코드는 직관적이고 접근성이 높은 파이썬으로 작성되었다. 다양한 문제에 대한 접근 방식과 풀이법을 살펴보면서 알고리즘의 원리부터 응용 방법까지 확실하게 익혀보자.

 

 

상세이미지_700_똑똑한 코드 작성을 위한 실전 알고리즘.jpg

조지 하이네만 저자

조지 하이네만

소프트웨어 엔지니어링 및 알고리즘 분야에서 20여 년간 경험을 쌓은 컴퓨터공학과 교수다. 『Algorithms in a Nutshell, 2nd ed.』(O’reilly, 2016)의 저자이며 오라일리 사파리에서 <Exploring Algorithms in Python>, <Working with Algorithms in Python>을 비롯한 동영상 강의를 다수 제작했다. 논리 및 수학 퍼즐에 관심이 많아 스도쿠의 변형인 Sujiken 퍼즐과 Trexagon 퍼즐을 발명했다.

윤대석 역자

윤대석

12년간 임베디드 리눅스 커널 개발, 윈도우 애플리케이션 개발, 리얼타임 운영체제에서의 BSP 개발, 백엔드 개발 등 다양한 개발 경험이 있으며 항상 기본에 충실하고자 노력하는 엔지니어다. 알고리즘과 운영체제를 꾸준히 공부하고 있으며, 오픈 소스 리눅스 커널 분석 및 수정 활동에 참여하고 있다. 한빛미디어에서 『쓰면서 익히는 알고리즘과 자료구조』(2021)를 집필하고 『러닝 Go』(2022)를 번역했다.

 

CHAPTER 1 문제 해결

1.1 알고리즘이란

1.2 리스트에서 가장 큰 값 찾기

1.3 주요 연산 횟수 계산하기

1.4 모델로 알고리즘 성능 예측하기

1.5 리스트에서 가장 큰 두 수 찾기

1.6 토너먼트 알고리즘

1.7 시간 복잡도와 공간 복잡도

1.8 요약

1.9 연습 문제

 

CHAPTER 2 알고리즘 분석

2.1 경험적 모델로 성능 예측하기

2.2 곱셈 성능 예측하기

2.3 성능 클래스

2.4 점근적 분석

2.5 모든 수행 계산하기

2.6 모든 바이트 계산하기

2.7 이진 배열 탐색

2.8 이진 배열 탐색으로 리스트에서 값 찾기

2.9 이진 배열 탐색의 또 다른 기능

2.10 알고리즘 성능 비교

2.11 곡선 피팅 vs. 상/하한

2.12 요약

2.13 연습 문제

 

CHAPTER 3 해싱

3.1 키와 연관된 값

3.2 해시 함수와 해시 코드

3.3 (키, 값) 쌍에 대한 해시 테이블 구조

3.4 선형 조사로 충돌 검출 및 해결하기

3.5 연결 리스트를 사용한 분리 연쇄법

3.6 연결 리스트에서 엔트리 삭제하기

3.7 개방 주소법과 분리 연쇄법 평가하기

3.8 동적 해시 테이블

3.9 동적 해시 테이블 성능 분석하기

3.10 완벽한 해싱

3.11 (키, 값) 쌍 순회하기

3.12 요약

3.13 연습 문제

 

CHAPTER 4 힙

4.1 최대 이진 힙

4.2 (값, 우선순위) 삽입하기

4.3 우선순위가 가장 높은 값 제거하기

4.4 배열로 이진 힙 구성하기

4.5 엔트리 이동의 구현

4.6 요약

4.7 연습 문제

 

CHAPTER 5 정렬

5.1 교환을 통한 정렬

5.2 선택 정렬

5.3 성능이 O(N2)인 정렬 알고리즘의 구조

5.4 삽입 정렬과 선택 정렬의 성능

5.5 재귀와 분할 정복

5.6 병합 정렬

5.7 퀵 정렬

5.8 힙 정렬

5.9 O(NlogN) 알고리즘의 성능 비교하기

5.10 팀 정렬

5.11 요약

5.12 연습 문제

 

CHAPTER 6 이진 트리

6.1 시작하기

6.2 이진 탐색 트리

6.3 이진 탐색 트리에서 값 탐색하기

6.4 이진 탐색 트리에서 값 제거하기

6.5 이진 탐색 트리 순회하기

6.6 이진 탐색 트리 성능 분석하기

6.7 자가 균형 이진 트리

6.8 자가 균형 이진 트리 성능 분석하기

6.9 이진 탐색 트리를 (키, 값) 심볼 테이블로 사용하기

6.10 이진 탐색 트리를 우선순위 큐로 사용하기

6.11 요약

6.12 연습 문제

 

CHAPTER 7 그래프

7.1 그래프로 문제 모델링하기

7.2 깊이 우선 탐색으로 미로 풀기

7.3 너비 우선 탐색으로 미로 풀기

7.4 유향 그래프

7.5 가중치 그래프

7.6 다익스트라 알고리즘

7.7 모든 쌍의 최단 경로 문제

7.8 플로이드-워셜 알고리즘

7.9 요약

7.10 연습 문제

 

CHAPTER 8 정리

8.1 파이썬 내장 데이터 타입

8.2 스택 구현하기

8.3 큐 구현하기

8.4 힙과 우선순위 큐 구현

8.5 이후 학습

핵심만 골라 확실하게 익히는 파이썬 알고리즘

 

알고리즘 학습에서 가장 중요한 것은 문제 해결 능력입니다. 단순히 각 알고리즘의 기능을 개별적으로만 공부할 것이 아니라, 특정 문제가 주어졌을 때 여러 가지 접근법을 적용해보고 서로 다른 알고리즘의 성능을 비교할 수 있어야 합니다.

 

이 책은 정렬, 이진 탐색, 그래프 등 컴퓨터 과학에서 가장 많이 활용되는 핵심 알고리즘을 사용해 문제를 효율적으로 해결하는 방법을 알려줍니다. 어려운 수식이 아니라 간결한 파이썬 코드 및 대응되는 그림을 따라가면서 알고리즘의 원리를 쉽게 이해하도록 안내합니다. 알고리즘 구현 코드를 한줄 한줄 살펴보고 각 단계를 시각화한 도식과 함께 진행 과정을 차근차근 짚어봅니다. 예제 코드를 직접 실행한 성능 분석 표를 통해 서로 다른 알고리즘의 성능 측정치를 직관적으로 비교해보고, 마지막으로 연습 문제를 풀어보며 각 장에서 배운 내용을 응용해봅니다.

 

예제와 연습 문제는 파이썬으로 작성되었습니다. 파이썬 코드는 간결하고 직관적이며 다양한 유형의 문제에 대응하기 쉬워, 기술 면접이나 시험을 위해 알고리즘을 공부한다면 파이썬이 좋은 선택지입니다.

 

 

대상 독자

  • 컴퓨터 과학의 핵심 알고리즘을 쉽게 익히고 싶은 사람
  • 코드를 개선해 프로그램 성능을 높이고 싶은 사람

 

주요 내용

  • 컴퓨터 과학과 소프트웨어 공학의 핵심 알고리즘을 살펴봅니다.
  • 분할 정복, 동적 프로그래밍, 탐욕 알고리즘 등 효율적인 문제 해결 전략을 학습합니다. 
  • 코드를 분석하고 빅오 표기법을 사용해 시간 복잡도를 평가합니다.
  • 파이썬 라이브러리와 자료구조를 사용해 알고리즘으로 문제를 해결합니다.
  • 중요한 여러 알고리즘의 주요 단계를 이해합니다.

 

추천사

이 책은 코드의 효율을 향상하는 다양한 알고리즘을 소개한다. 컴퓨터 과학에서 사용하는 자료구조와 기본 알고리즘을 알려주어 독자가 더 효율적인 프로그램을 작성하도록 돕는다. 코딩 인터뷰를 준비하는 개발자와 지망생에게도 유용한 가이드가 될 것이다.

즈비 갈릴리, 조지아 공과대학교 명예 컴퓨팅 학장 겸 프레더릭 G. 스토리 의장

안녕하세요. 도미닉입니다.


오늘은 <똑똑한 코드 작성을 위한 실전 알고리즘> 이라는 책을 읽고 느낀점을 공유하고자 합니다.

프로그래밍에서 알고리즘은 실무와 떨어져있다는 생각을 많이 하게 됩니다.

 

프론트앤드를 개발한다면 특히 알고리즘을 공부하면서 알게 된 지식을 사용할 일이 거의 없는데요.


이 책은 코드 작성을 위한 기본적이면서 필수적인 실용 코드를 작성하는 방법을 안내합니다.


또한 알고리즘 책들이 읽다보면 갑자기 어려운 내용들을 설명해서 따라가기 쉽지 않은데요.


이 책은 필수적인 내용부터 이해하기 쉽게 설명을 합니다.


요즘에 알고리즘 문제를 푸는데 가장 많이 사용되는 파이썬이라는 언어를 공부하면서 이 책을 읽게 되면


알고리즘과 코딩에 대해서 많은 성장을 할 수 있는 책으로 추천합니다.


한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다. 컴공생에게 알고리즘이란... 배우는 순간부터는 항상 염두에 두어야 하는 그런 존재일 것이다. 개발자의 역량을 평가하는 가장 대표적인 요소이기도 하다. 그 목적은 당연하지만 잘 돌아가는 코드를 작성하기 위함일 것이다. 이 책은 처음 알고리즘을 접하는 사람들을 위해 꼼꼼한 설명을 제공함과 동시에 당장 적용할 수 있는 실전 알고리즘을 소개하고, 그를 통해 더욱 깊은 이해를 돕는다. 자료구조, 자료구조를 베이스로 하는 추상 데이터 타입, 그리고 자료구조와 추상 데이터 타입을 가지고 문제를 해결하는 알고리즘들을 다룬다고 할 수 있다. ​ 본문 구성의 예시로 이진 트리 챕터를 보면, 첫 장에는 배울 내용들이 나열되어 있다. 이진트리의 '시작하기' 장에서는 이전에 설명한 '재귀'와 '연결 리스트'를 다시 한 번 상기시키고 살펴본다. 여기에 이어 '문제 나누기'를 설명하고, '이진 연산'에서의 활용으로 확장시킨다. 이 과정에서 필요한 부분은 충분히 시각화하여 제공해준다. 시작하는 부분만 해도 이렇게 꼼꼼하게 구성되어 있다. ​ 본격적으로 '이진 탐색 트리'와 같은 장으로 들어가면, 시공간 복잡도에서 시작해 BinaryTree 클래스의 메서드 하나하나를 빠짐없이 설명한다. 또한 예제를 그림으로 표현하여 확실한 이해를 돕는다. 챕터의 마지막에는 '요약하기'와 '연습문제' 장이 있다. 연습 문제가 굉장히 많다. 과제로 주어진다면 굉장히 귀찮았겠지만 배우기에는 최고라는 생각이 든다. 연습 문제에 대한 솔루션은 깃허브에 제공되어 있기 때문에 내가 작성한 코드가 맞는건지 틀린건지 모른채 지나갈 일은 없다. ​ 이 책에서 전반적으로 느낀 점은 서술이 굉장히 정확하다는 것이다. 모호함을 최대한 배제하려 노력한 것 같다. 또한 편집이 깔끔하여 가독성이 좋았다. 전공 시간에 사용하던 교재에서는 볼 수 없었던 것이다. 마지막으로, 제목은 '실전' 알고리즘이라 하지만 어찌 보면 핵심이고 기본을 다룬다. 알고리즘을 잘 배우고 싶다면 좋은 선택이 될 것 같다.



알고리즘 학습과의 전쟁(?)은 언제 끝날 것인가.

매번보고 까먹는 나를 탓하며 매번 더욱 좋은(?) 책들이 나와 주는 것에 감사를 표할 뿐..

과거 학교 교재를 생각하면 이렇게나 친절하고 좋은 책이 많아졌다는 것에 감탄과 부러움만 존재한다.

핵심만 골라 확실하게 알려준다고 하는 캐치프레이즈와 함께 책을 광고 중이라 너무 짧거나 적은 내용일지 의심중이라면 그렇지 않다 충분한 내용으로 친절히 잘 설명 해주고 있다.

파이썬이란 언어가 장벽이라면 알고리즘을 배움에 있어서 언어가 무슨 상관인가 특히 파이썬은 더욱 쉽고(?) 빠르게 배우고 실행 가능하니 오히려 알고리즘을 공부하기엔 적절한 것 같다는 생각도 했다.

 

알고리즘의 설명은 코드와 그림으로 단계별 이해를 돕고, 마지막 연습문제로 더 공부 할 수 있으니.. 좋으나

연습문제의 답은 어디에서 찾을지 짧게 읽어서 아직 의문이라...고민중이다.

 

8장의 "The art of computer programming" 책에 대한 내용을 보고 번외로 .. 이 책이 완결이 난 것이 아니라는 경악(?)스러운 정보를 덤으로 얻었다. 

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다...만진심이 담겨있습니다.

허위 사실 유포는 일절 없음

 

 

알고리즘을 언급할 때가 언제일까. 채용 프로세스 중 코딩 테스트에서 많이 언급을 했었다. 그러다보니 '알고리즘? 그거 코테(코딩 테스트 준말)할 때만 필요하잔아.'라고 생각했던 적도 있다. 웹 개발자든, 백엔드 개발자든, 모바일 개발자든 알고리즘을 실무에서 제대로 활용해본 분이 얼마나 될까 싶기도 하다.

 

그런 생각을 하다가 알고리즘이 필요한 순간을 마주 했을 때 당혹감은 정말 어마어마하다. 대용량 트래픽을 처리해야 한다거나 복잡한 연산이 수행되어야 하는 경우 등등 B2C 서비스부터 게임까지 다양한 방면에서 이런 순간을 마주할 수 있다. 그럴 때 괜시리 엉뚱한 곳에 원망을 돌린다. '제대로 된 알고리즘을 배워봤어야지. 맨날 코테용 알고리즘만 했으니 제대로 할 수 있을리가.' 그런 생각을 했다면 더 늦기 전에 공부를 하자. 실무를 위한, '실전'을 위한 서적도 있으니 말이다.

 

 

20221127_230412.jpeg

 

 

 

꽃게랑 땡기게 하는 표지를 가진 '똑똑한 코드 작성을 위한 실전 알고리즘'은 코테용으로 읽기는 부적합할 수 있다. 코테보다는 이 책의 타이틀에 등장하는 '실전'이라는 부분에 초점을 맞춰서 볼 필요가 있다. 단순한 문제 풀이식 알고리즘 설명이 아니라 알고리즘의 구조적 배경부터 실전 사용시 기대치, 실제 성능 비교 등이 등장한다.

 

이 서적을 읽기 전에 몇가지 주의사항이 있다.

 

  • 기본적인 파이썬을 이해할 것
  • 코딩 테스트 대비 문제 중 중급 수준의 문제까지는 풀어본 경험이 있을 것
  • 자료구조 기본 지식이 있을 것

 

서적 자체는 다른 기술서에 비해서 두껍지 않다. 하지만 1장의 무게감은 상당하다. 위 3가지가 부족할 경우 그 무게감이 두배, 세배로 느껴지게 될 것이다. 파이썬을 완전히 이해할 필요는 없다. 내용의 문맥을 이해할 정도면 충분하다. 코딩 테스트나 자료구조를 공부할 때 배우게 되는 개념들이 많이 등장한다. 그런데 그 개념을 이 책으로 처음 배우면 상당히 어려울 수 있다. 기본적인 개념을 따로 탑재 후 이 책에서 구조적 배경과 실전 활용을 습득하면 더 쉽고 빠르게 내용을 흡수할 수 있을 것이다.

 

 

 

몇가지 예를 들어보자. 코딩 테스트를 할 때 가장 먼저 접하는 것 중 하나가 빅오 표기법 혹은 점근적 표기법이다. 알고리즘의 효율성을 알려주는 표기법으로 O(1), O(NlogN), O(N) 등등 이렇게 작성을 하기에 빅오 표기법으로도 불린다. 이 책 2장에서는 점근적 분석을 알려준다. 효율적인 알고리즘이 어떤 형태인지를 실제 테스트해보면서 문제 인스턴스 크기와의 상관 관계를 설명한다. 그 뒤로는 이진 배열 탐색을 통해 여러 복잡도 클래스를 비교하고 이해할 수 있다.

 

또 다른 예로는 정렬이 적절해 보인다. 정렬 역시도 코딩 테스트의 단골 키워드이다. 삽입 정렬, 선택 정렬, 병합 정렬 등 코테를 위해 학습을 해봤겠지만 실전에서는 어떤 의미를 가지는지 이해하지 못한 분들도 계셨을 것이다. (그게 나야.) 이 책의 5장에서는 정렬의 성능 위주로 설명을 하고 있다. 특히 인상적인 부분이 선택 정렬과 삽입 정렬 성능 설명이 끝난 뒤 5.5절에서 재귀와 분할 정복을 설명하는 부분이다. 재귀 실행 과정을 도식화하여 텍스트를 전체 읽지 않아도 저자의 의도를 쉽게 이해할 수 있었고, 이어질 병합 정렬, 퀵 정렬 등에서 분할 정복을 활용하여 드라마틱하게 성능을 개선한 결과를 볼 수 있다.

 

이렇게 매력적인 서적이지만 입문 서적은 절대 아니다. 수학적 사고가 어느 정도 훈련되어 있거나 코딩 테스트 등으로 알고리즘이 익숙한 분들에게 추천해 줄 수 있는 서적이다. 이 글을 읽는 분이 만약 입문자라면 이 책을 타이틀을 기억하고 있다가 언젠가 알고리즘 역량을 업그레이드하고 싶어질 때 이 책을 찾으면 된다. 그 때가 되면 당신의 입맛에 딱 맞는 꽃게탕이 되어 있을 것이다.

제공하는 라이브러리들을 사용만 하던 시대가 지나고

지금은 알고리즘이 개발자에게 필수인 시대다.

 

같은 문제를 해결하는 데에도

더 나은 성능과 더 나은 효율을 내기위해

다양한 시각으로 문제를 풀어낼 수 있는

최적의 알고리즘을 찾고

그런 알고리즘을 코드로 만들어낼 수 있는

개발자가 인정받는 시대인 것이다.

 

이런 시대적 요구와 상황에 맞춰

개발 역량을 끌어올리기에 적합한 책인 것 같다.

 

 

똑똑한코드작성을위한실전알고리즘.jpg

 

문제를 해결하기 위한 다양한 알고리즘들을

그림과 자세한 설명으로 그 개념을

쉽게 이해할 수 있게 도와준다.

 

쉽다는 개발언어 파이썬으로 작성되어

개발에 익숙하지 않아도 읽기에 어렵지만은 않다.

 

개발에 익숙한 경우에도 다양한 자료구조와

실제로 많이 활용되는 핵심적인 알고리즘들의

동작방식을 이해하고

성능에 대해 생각해 보는 좋은 시간이 될 것 같다.

 

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

파이썬을 통한 알고리즘 문제 풀이 책은 시중이 정말 많이 나와있습니다. 양질의 내용들로 차있다보니 무엇을 골라도 크게 부족하진 않겠지만, 눈높이는 책마다 다르다보니 무엇을 골라야 나에게 맞는지 잘 모를 때가 있는 데, 이 똑똑한 코드 작성을 위한 실전 알고리즘 책은 막 입문 단계를 지나 알고리즘에 대하여 접근하고 싶은 분들께 추천드리는 책입니다.

 

해당 책은 문제 해결부터 접근하여 알고리즘 분석, 해싱, 힘, 정렬, 이진 트리, 그래프, 정리 순서대로 구성되어 있습니다. 먼저 알고리즘을 왜 배워야 하는지에 대해 친절히 적혀있고, 이후 정석과도 같은 느낌으로 파이썬 알고리즘에 대하여 한단계씩 접근해나가고 있습니다.

 

첫 알고리즘 분석 파트는 알고리즘에 대해 너무 어렵게 접근하지 않도록 독자들을 유도하고 있습니다. 알고리즘 동작 방식을 설명하는 일은 스토리텔링과 같다고 하는데, 각 알고리즘은 참신한 개념 혹은 원래 해ㅐ결책을 뛰어넘는 혁신을 가져온다고 합니다. 간단한 문제에 대한 몇 가지 해결책을 탐구해보면서 알고리즘 성능에 영향을 미치는 요소들을 알아볼 것입니다. 그 과정을 통해 알고리즘의 구현과 독립적으로 성능을 분석하는 기술을 소개하되, 실제 구현을 통한 경험적인 증거를 제공할 것입니다.

 

이후 사진과 간단한 예시들을 통해 왜 그렇게 생각이 드는지, 혹은 어떤 관점에서 봐야 더욱 효율적인 알고리즘을 생성할 수 있는 지에 대해 적혀 있습니다. 알고리즘의 원리를 한 눈에 파악한 뒤 예제 코드를 한 줄씩 살펴보고, 각 코드의 동작을 시각화한 도식으로 진행 과정을 짚어본 뒤 코드를 직접 실행해 성능을 분석합니다. 이 과정을 통해 연습 문제까지 풀어보면서 문제 해결력을 키울 수 있고, 깃허브에서 샘플 솔루션 또한 제공되니 책을 천천히 따라오면 되겠습니다.

 

정리하자면, 파이썬 기초 이후에 데이터 과학이나 다양한 분야들에 대하여 공부를 하기 전, 더욱 실력을 높여 제대로 된 코드를 작성하고 싶으신 분들께 추천드리는 책입니다. 국내 정서와는 조금 다를 수 있으나, 알고리즘 자체를 확인하는 과정에서 하나씩 문제 해결 방법을 경험할 수 있어 충분히 좋은 책이라 생각이 듭니다.

 

자료구조, 알고리즘을 전혀 모른다면 이 책은 확실히 어려울 겁니다.

자료구조, 알고리즘을 배웠던 저도 페이지를 쉽게 넘기지는 못했으니까요.

어려운 개념이나 수식이 없다고 쉬운 책은 아니었습니다.

저는 책을 보다 덮고 생각을 하는 경우가 많았습니다.

그래도 이해가 어렵다면 다시 돌아가기도 했죠.

 

학부생 시절에는 ‘시간, 공간 복잡도를 따져 무엇이 더 효율적인가'까지만 배웠습니다.

물론 ‘언제, 어떻게, 왜’를 다루긴 했습니다. 성적을 위한 공부를 하다 보니 가볍게 여겼던 것이죠.

이 책은 우리가 배웠던 알고리즘을 머릿속에서 꺼낸 다음, ‘언제, 어떻게, 왜'라는 비어 있는 곳을 채워줍니다.

 

이 책은 더 효율적이고 창의적인 코드 작성을 위한 알고리즘 사용법을 다룬 책입니다.

모든 개발자가 알고리즘을 알아야 한다고 주장하는 책이 아니죠.

때문에 모든 개발자가 반드시 읽을 필요는 없습니다.

하지만 더 나은 개발자로 성장하고 싶은 이들에게는 가치 있는 책이지 않을까 싶습니다.

 

또 하나!

이 책의 예제는 파이썬 코드입니다. 그렇다고 파이썬 개발자가 아니라고 돌아설 것이냐! 전혀 아닙니다.

저는 자바스크립트를 주로 다루는 개발자이지만, 코드를 보고 이해하는데 전혀 문제없었기 때문이죠.

	"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다

 

 

 최근 개발 기초 공부를 다시 하려던 와중에 눈에 띈 책이었습니다. 특히 코딩테스트 연습을 하면 '아는건데 기억이안난다' 라던가 ' 이걸 해결해주는 알고리즘이 있었는데 뭐였더라?' 하는 경우가 많았는데 이책을 통해서 극복 해 볼 수 있을까 해서 책을 선택하게 되었습니다.

결론부터 말하자면 어느정도 극복 되었습니다. 보통 알고리즘이라고 하면 떠오르는 정렬 부터 시작해서 콜렉션, 트리, 그래프 등 알고리즘들으 잘 아루르면서 설명 해 주고 있습니다.  다만 책의 대상독자에게도 말하듯이 처음 알고리즘을 접하시는 분들보단 CS지식이 어느정도 있고 자료구조에서 알고리즘 맛보기정도는 해보신 분들에게 추천드립니다. 

 알고리즘을 설명하면서 거기에 필요한 자료구조도 어느정도 알려주고 있어서 책을 읽을때 굳이 다른 자료를 찾아볼 필요가 없던것도 장점이었습니다. 

 책의 예제코드가 파이썬으로 되어있는데, 파이썬에 익숙하지 않은 저로서는 조금 어려울 뻔 했으나 라인바이라인으로 설명을 잘 해주고있어서 무리 없이 넘어갈 수 있었습니다. 다만 파이썬 코드에 익숙하신 분들이라면 훨씬 더 이해가 쉬웠을거라는 생각이 드네요.

코팅테스트 준비 혹은 저처럼 기본 공부를 한번 더 해야겠다는 생각을 하신 분들에게 추천드릴만한 책입니다.

KakaoTalk_20221127_191440161.jpg

 


 

 

학부 과정에서 알고리즘 수업을 수강했거나 기본적인 알고리즘을 알고 있는 이후에 보면 좋은 책이다.

여러 알고리즘을 소개하기 보다는 대표적으로 많이 사용하고 널리 알려진 알고리즘들을 조금 더 심도있게 다루고 있는 책이라고 생각하면 된다. 책에서 다루는 알고리즘으로는아래와 같다.

  • 알고리즘 분석(시간복잡도, 공간복잡도, 성능 비교 방법)
  • 해싱(키, 해시함수, 연결 리스트, 동적 해시 테이블, 완벽한 해싱)
  • 힙(최대 이진 힙, 배열로 이진 힙 구성, 엔트리 이동의 구현)
  • 정렬(교환, 선택, 삽입, 재귀, 병합, 퀵, 힙, 팀)
  • 이진 트리(이진 탐색 트리, 탐색, 제거, 순회, 성능 분석, 자가 균형 이진 트리)
  • 그래프(모델링, 깊이 우선, 너비 우선, 유향, 가중치, 다익스트라, 플로이드-워셜)

알고리즘을 처음 배울때에는 어떤 문제에서 어떤 알고리즘을 사용하면 효율적인지 배운다. 이 책에서는 알고리즘을 소개하는게 주 목적이 아닌 자료구조와 기본 알고리즘을 알려주어 더 효율적인 프로그램을 작성하도록 도와주는 것이 핵심이다. 코드의 성능을 최대화하려면 여러 데이터 타입을 효율적으로 구현하는 방법을 알아야 하기 때문이다. 그 중 저자가 말하는 데이터 타입들을 백, 스택, 큐, 심볼 테이블, 우선순위 큐, 인덱스 최소 우선순위 큐, 그래프 이다.

 

이 책의 가장 좋은 장점은 여러 알고리즘들의 성능을 비교하여 정리한 점이다.

KakaoTalk_20221127_191440161_01.jpg

 


KakaoTalk_20221127_191440161_02.jpg

 


특히 정렬 알고리즘 소개에서 팀 정렬(Tim sort)은 학교나 학원에서도잘 안 알려주는 알고리즘이다. 이런 알고리즘을 소개해주면서 기존 알고리즘들과 어떻게 다르고 얼마나 더 성능이 좋은지를 시각적으로 알려준다. 코드만 보면 단번에 이해하기 어려운 알고리즘을 시각적으로 어떻게 동작하는지도 자세히 서술되어 있다.

 

KakaoTalk_20221127_191440161_03.jpg

 


처음에도 적어두었지만 이 책은 단순히 알고리즘을 공부하겠다는 생각으로 접하는 것은 권장하지 않는다. 그러나 어느 정도 알고리즘을 접한 이후에 실무에서 내가 구현한 알고리즘 성능을 조금 더 끌어올리기 위해 어떻게 해야하는지 고민될 때 접하는 것을 추천한다. 물론 요즘에는 언어 자체적으로 기본 내장된 함수들을 사용하기 때문에 성능에 관해 다른 방면으로 접근하는 경우가 많다. 그러나 프로그래머라면 성능에 대해 한번쯤은 고민해보고 내가 작성한 알고리즘이 아니더라도 기본 구현된 알고리즘 성능에 대해 고민하면서 가볍게 읽어보았으면 한다.

- 각 유형별 알고리즘 문제 풀이가 가능한 이들에게 이론적으로 학습하기 위한 중급 서적

- 이유도 모르고 무작정 좋은 알고리즘을 찾는게 아닌, 최적화된 알고리즘을 적용하기 위한 고민을 해볼 수 있다

컨텐츠 명으로만 보면 처음 보는 것은 없지만, 그 안의 내용들은 고민하거나 배워본 적이 없는 내용들로 가득하다

- 직접 구현하는 과정이 필수적이진 않기에 1회독에는 10시간 정도가 걸렸던 것 같으며, 회사 업무 등을 위해 늘 옆에 비치해둘만한 책

 

알고리즘의 기초 학습이 부족하다고 생각되는 분께 추천드리는 책임을 밝힌다.

이 책은 여느 책들과 비슷하게 알고리즘의 기초에서 시작하여 그 내용을 점점 심화하는 구성으로 이루어져 있다. 하지만 이때껏 필자가 리뷰하였던 책들과 다른 점이 있다면 파이썬을 이용해 우리가 일반 개발에서 사용되는 알고리즘의구체적인 내용들을 잘 정리하여 설명하고 있다는 점이다.

또한 인상적인 부분이 있다면 바로 각 알고리즘별 퍼포먼스를 잘 정리하여 술 하였다는 점이다. 가령 단계적으로 알고리즘을 최적화해가면서 퍼포먼스가 얼마나 향상되는지. 그리고 input case의 사이즈가 증가해감에 따라서 알고리즘의 특정 부분의 차이에 따른 퍼포먼스 격차가 얼마나 커지는지등을 잘 술하고 있다.

이런 부분에 대한 벤치마킹은 웬만한 책들에서는 이렇게 디테일하게까지 정리하지 않는 편인데, 이 책에서는 그런 내용들까지도 꼼꼼히 정리하여 독자들에게 제공하고 있다는 점에서 상당히 인상적이었다.

그렇기에 파이썬에 대한 언어의 기본적인 틀을 어느 정도 알고 있고, 컴퓨터프로그래밍 코드를 이용하여 기본적인 메인 루프를 구동해 본 경험이 있는 사람들이라면 이 책을 통해 충분히 알고리즘에 대한 가르침을 충만히 얻을수 있을 것이라 생각된다.

【책의 구성】 '똑똑한 코드 작성을 위한 실전 알고리즘'은 어떤 책일까?

 솔직히 이 책은 알고리즘 기본기가 튼튼하게 쌓여있는 사람이학습하기에는 내용이 막입문하는 초급자 혹은 기본기를 튼튼히 하고자 하는 중급자에게 포커싱이 되어 있어서 썩 만족스러운 학습이 되지 않을 가능성이높다.

그렇기에 막 입문하려는 알고리즘 초보자나 혹은 기초를 다시금 튼튼히 하고자 하는 중급 수준의 알고리즘 풀이 능력을가진 분들이 학습하길 권한다.

또한 파이썬으로 알고리즘 풀이를 갈아타신 분들께서도 이 책을 통해 파이썬을 이용한 알고리즘 풀이에 대한 스킬을익히면 유용하지 싶다.

다만, 보통의 알고리즘 대회에서는 통상적으로 C/C++과 같은 native language를 활용한 풀이를 많이제출한다는 점을 명심하자. 왜냐하면 native Language 코드로구동한 (어셈블을 제외한) 알고리즘의 퍼포먼스는 아직 다른언어들에서 그 근사까지는 추적하였어도 그것들을 능가한 경우는 없는 것으로 알고 있기 때문이다.

 

1 장 : 문제 해결

 알고리즘의 개념을 몇 가지 예를 들어가며 친절히 설명하고있다

첫 예제로 가장 큰 값 찾기가 언급되었는데, 이는 알고리즘의 다른책들에서도 많이 사용하는 예제이므로 참고해두면 좋을 듯하다.

또한 책 내용에 설명을 돕는 그림들이 많이 있기 때문에, 그림을 심도있게 살펴봐두었다가 추후 자신만의 알고리즘을 구축할 때 응용하면 충분한 퍼포먼스 향상을 이뤄낼 수 있을 것이라 생각된다.

 

2장: 알고리즘 분석

 이 장에서는 알고리즘의 성능 분석에 대한 관점과 성능 분석등에 대한 내용을 잘 술하고 있다.

이 부분이 솔직히 알고리즘 테스트나 알고리즘 면접을 준비하는 과정에서 제일 간과하기 쉬운 부분이다. 따라서 Big O Notation에 따른 시간 복잡도가 어떤 식으로변화하는지 그리고 이러한 알고리즘으로 1s 동안 몇 개의instruction set을 처리할 수 있는지 꼼꼼히 알아두도록 하자.

보편적으로 1초에 1억개의 instrution set이 수행될 수 있다고 가정한다. 다만현대의 CPU는 훨씬 정교해지고 최적화가 하드웨어 단에서부터(ALU) 잘 되어 있기 때문에 위의 통상의 기준이 더 이상 통용되지 않을 수 있음도 참고해두자.

 

3~7 장 : 보편적인알고리즘

 학부에서 배울법한 알고리즘들은 3~7장에 모두 정리되어 있다. 따라서 스텝별로 꼼꼼히 학습해 보도록하자.

알고리즘은 언어를 떠나서 추상화 개념을 충분히 잘 인지하기만 하면 모든 언어에서 같은 형태로 구현이 가능하다. 따라서 책에서 묘사하고 있는 설명을 위한 그림들을 잘 머릿속에 새겨 넣어 두도록 하자.

 

【 똑똑한 코드 작성을 위한 실전 알고리즘을 읽고 나서.. 】

 알고리즘은 책의 서문에서 번역을 맡으신 윤대석님의 말씀처럼하루아침에 고수가 될 수 있는 그런 학문이 아니다

알고리즘 주제 하나만으로도 "도널드 리누스"는 몇 백 페이지에 이르는 책을 총 8(아직 5권 정도 밖에 출간되지 못했다.)이나 집필하였기에 이러한 점만 보아도 해당 학문의 분야가 상당히 세분화되어있고 깊이가 상당하다는 것을 알 수있다.

그렇기에 알고리즘을 잘하기 위해서는 튼튼한 기초 위에 다양한 문제들을 주기적으로 학습함으로써 알고리즘과 관련된두뇌의 영역을 강화할 수밖에 없다.

또한 알고리즘은 단순히 문제만을 푸는 과정이 아니다. 알고리즘을 푼다는것은 하나의 프로그램 전체를 설계하는 과정과 같다고 할 수 있다. 특히나 검색과 같은 부분에 있어서키워드를 입력할 때 연관 키워드를 노출해 주기 위해서는 스트링의 부분과 매칭되는 유사 키워드들을 DB 등에서추려서 사용자에게 노출시켜야 한다. 이때 이러한 노출 부분의 스트링을 취득하는 과정에서 우리가 배웠던알고리즘들이 도입되게 된다.

, 알고리즘을 잘한다는 것은 한 프로그램의 전체를 이해하고 그 깊이를심도 있게 분석하여 이전과는 다른 훨씬 진보된 하나의 최적화된 프로그램을 잘 만들 수 있음을 간접적으로 증명하는 것과 같다.

따라서 하루에 한문제, 많으면 3문제. 매일매일 알고리즘 문제를 푸는 습관을 들이도록 하자.

자의 경우를 예로 든다면, 필자는 릿 코드를 통해 알고리즘 스터디를즐겨 하는 편이다.

 

본 도서는 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

KakaoTalk_Photo_2022-11-26-16-15-53.jpeg

 

 
이 리뷰는 한빛미디어 __나는 리뷰어다__ 활동을 위해서 책을 제공받아 작성된 서평입니다.
 
실제로 개발을 하면 알고리즘을 언제 쓰지 하다가도 계속 성능 향상을 하기 위해 어떤 부분을 튜닝해야 하나 고민한 적이 많다. 하지만 실제 알고리즘과 실무에서 적용하는 데에는 많은 부분들에서 어려움이 있기도 하고 코드가 더러워지는 경험을 하기도 한다. 하지만 그래도 개발자라면 알고리즘에 대해 한번 공부해야 한다고 생각하기 때문에 이 책을 신청해서 읽어 보았다.
 
개인적으로는 이 책이 특별하게 뭔가를 많이 알려주거나 했다고는 생각들지 않았다. 어떤 리뷰어분이 코딩 테스트의 심화를 알려주는 것 같다고 하는데 그 표현이 더 적절하다고 생각한다. 그러다보니 작성자의 경우에도 크게 와닿지는 않고 이론적인 부분을 다시한번 훝어봤다는 느낌만을 주었다. 하지만 책 두께가 얇기 때문에 완전 처음부터 공부해야 하는 사람이 아니라 이미 개발을 하는 사람에게 다시 리마인드 시키기 위한 용도로는 적절한 책인 것 같다.
 
책은 많은 알고리즘 서적이 그렇듯 자료구조로 시작해서 여러 알고리즘들을 설명해준다. 그리고 많은 알고리즘 서적에 있는 것처럼 연습문제가 존재해서 실제로 스스로 코딩해볼 수 있게 해준다. 그래도 다른 서적이랑 다른점을 보자면 파이썬 코드가 어떻게 동작을 하면서 알고리즘 성능을 높일 수 있는지 보여준다는게 아닐까 싶다.
 
작성자의 경우 실무에서 적용해보고 싶어서 이 책을 신청했었는데 역시나 실무와는 조금 거리감이 있다는 생각이 들었다. 머신러닝이나 인공지능이라면 모르겠지만 웹 백앤드의 경우에는 대부분의 성능이 db(캐시 등) 에 의해 발생해서 그런 것 같기도 하다.
 
하지만 만약 본인이 이미 실무자인데 이직을 하고 싶거나 할 때, 많은 알고리즘 부분을 잊어버려서 코딩 테스트나 인터뷰를 준비해야 한다면 이 책이 도움을 줄 것 같다. 심화적인 부분을 이야기해주기도 하고 책이 얇아서 한번씩 훝어보기 좋을 것 같다. 

제법 오랜기간 IT 업계에 몸을 담고 있다. 요즘 늦바람이 들어 주경야독을 몸소 실천하고 있지만 대학 졸업이후 상당한 시간이 흘렀으니 예전에 배운것들이 이미 오래전 호랑이 담배피던 시절의 지식이 되어버렸다... ^^


제법 개발을 한다고는 하는데 그간 돌아보면 여러 패키지 기반의 응용 영역에 많이 머물러서 잔머리만 늘은것 같다, 대학원에서 학문적인 접근도 하고 있고 소위 말하는 xx러닝과 같은 인공지능적인 요소를 활용하거나 없으면 만들어야 하는 업무를 다루다 보니 근본적인 사고의 너비와 깊이에 대해 다시금 생각을 해볼 시간이 많아졌다.


그래 "IT 개발자라면 문제해결 사고와 능력을 기본적으로 구비해야한다" 는 전제를 잊고 지냈다, 바쁘다는 핑계로... 그리고 학부때(전자계산학과라는 호랑이 담배피던 시절) 교수님들께서 전산학/컴퓨터공학적인 시각의 과목들을 왜 그리도 많이 열심히 가르치려 하셨는지, 왜 커리큘럼이 그렇게 되어 있었는지 이제야 이해를 하게 된다. 


그래서 요즘은 머리에 기름칠 좀 하기 위해 종종 잠깐 짬을내서 알고리즘을 들여다 보는 재미를 가지고 있다.


한 두어권 이론서, 입문서 성격의 가벼운 책은 살펴봤고, 또 개발자라면 뭐니뭐니해도 쳐야 제맛을 느끼기에 새로운 책을 만나게 됐다.


이 책은 문재 해결이란 주제와 알고리즘 분석 방법을 통해 알고리즘에 대한 기초를 세울 수 있게 해준다.


그리고 여러가지 자료구조와 추상 데이터 타입 그리고 각종 탐색, 정렬 알고리즘을 통해서 개발자의 사고의 폭과 깊이를 확장시켜준다.


이 책은 어려운 개념이나 수식 없이도 이러한 내용을 훌륭하게 정리하여 전달하고 있다.

이를 위해 저자는 기본 원리나 사례를 소스코드 레벨로 소개하고 과정에 대한 친절한 해설을 하기도 하고, 알고리즘 내부의 처리 과정들을 그림을 통해 독자들의 이해를 돕고 있다.

또한 필요한 경우 동일한 내용에 대한 다양한 행위 방식을 비교함으로써 좀더 효율적이거나 최적의 방안에 대한 이해를 돕기 위해 최선을 다했다.

 

근래 봤던 세권의 알고리즘 책중 가장 균형감이 잡힌 책인것 같다, 너무 쉽지도 너무 어렵지도 않는...


이제 좀 머리가 말랑말랭해졌을라나? ^^


※ 본 리뷰는 IT 현업개발자가, 한빛미디어 책을 제공받아 작성한 서평입니다.

오랜만에 다시 읽게 되는 알고리즘 책이다. 이 책에 나오는 주요 알고리즘에 대한 내용은 다음과 같다. 

문제해결, 알고리즘 분석
해싱, 힙, 정렬, 이진트리, 그래프

우리가 알고리즘 공부를 할때 기본적으로 배워야 하는 알고리즘 들이다. 약간 전공서적 같은 느낌이 들긴 하지만 그것보다는 내용이 좀더 친절하게 나와 있다.

히자만 읽다보면 어려운 내용들이 많이 섞여 있다. 기초에 관련된 책이긴 하지만 난이도는 있는 책이다. 그리고 주요 코드들은 파이썬으로 되어있는데 파이썬을 모른다고 하더라도 크게 문제가 될것 같지는 않다. 코드 부분에 대한 설명은 거의 라인 단위로 설명을 해주고 있기 때문에 어떤 언어든 프로그래밍을 해본 사람이면 이해할수 있을 것이다. 

복습 차원에서 각 장 마지막에 있는 연습문제들은 한번씩 스스로 풀어보면 도움이 많이 될것이다. 어찌됐건 알고리즘 관련된 내용들은 이해도 이해 이이지만 한번씩 스스로 풀어보는게 중요하기 때문이다. 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

책을 잘못 골랐다.

최근에 서비스용 머신러닝 파이프라인을 만들었는데

출시 전 리팩토링을 하면서 과거의 내가 짠 코드를 수정했더니

속도 향상이 몇 군데 있었다.

그래서 "똑똑한 코드 작성을 위한 실전 알고리즘"이라는 제목을 보고 책을 고랐다.

내용을 보니 실무랑 관련있다기보단 코딩 테스트 심화용 도서에 가깝다고 보인다.

대충 훑어보고 자세히 안 읽어봐서 그럴 수도 있는데 어쨋든 그렇게 느꼈다.

(3장 '해싱'은 읽어볼 듯 싶다)

 

코딩 테스트 심화 공부를 하는 사람이 과연 이 책을 볼까

알고리즘 몇 개 익히고 문제를 많이 풀어보지 않을까.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

정리 : 보통 우리나라에서 나온 책들하고 조금 다른 책의 순서로 구성되었다. 보통의 책들은 시간복잡도를 다루고

배열기반 문제, 재귀, 연결리스트 , 스택 , 큐, 트리, 힙, 해시테이블, 그래프, 정렬 알고리즘 등이 나오는데 이런것들이 순서가 좀 달랐다.

장점은 그림이 많고 책이 얇은데 필요한 내용의 빠짐은 없었다. 다른 알고리즘 책들은 책이 너무 두꺼워서 들고다니기 부담스러웠는데 책에 쓸데없는 내용이 없어서 그런거 같다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

1.jpg

알고리즘은 컴퓨터 과학의 핵심이자 정보화 시대의 필수 요소입니다. 매일 일어나는 수십억건의 인터넷 요청에 응답하기 위한 검색 엔진에 사용되며, 인터넷에서 통신할 때 개인정보를 보호해줍니다. 또한 알고리즘은 맞춤형 광고로부터 온라인 가격 견적까지 수많은 분야에서 소비자에게 점점 더 많이 노출되고, 뉴스 미디어는 알고리즘이 무엇이며 무엇을 할 수 있는지에 관한 논의로 가득한 상황입니다.

 

 

알고리즘이란 주어진 문제를 논리적으로 해결하기 위해 필요한 절차, 방법, 명령어들을 모아놓은 것입니다. 넓게는 사람 손으로 해결하는 것, 컴퓨터로 해결하는 것, 수학적인 것, 비수학적인 것을 모두 포함하는 의미입니다.

 

제가 이 책을 선택한 이유는 이 책이 코드에 당장 적용해 효율을 향상해주는 다양한 알고리즘을 소개하며 파이썬으로 작성된 예제 코드를 제공하기 때문입니다.

현재 파이썬은 다양한 분야에서 사용되며, 가장 인기 있고 사용자 친화적은 프로그래밍 언어 중 하나이며 이 책에서는 알고리즘을 최대한 시각화하고 상세한 설명으로 독자의 개념 이해를 돕끼 때문에 훨씬 학습하기 수월합니다.

 

이 책의 특성은 알고리즘이 어떻게 구성되는지 단계별로 꼼꼼히 설명해 기초를 실전에 잘 적용하도록 이끌준다는 점입니다. 가장 많이 활용되는 핵심적인 부분을 주로 다루며 복잡한 부분은 친절하게 그림과 함께 설명하고 있기 때문에 알고리즘을 처음 접하는 사람뿐 아니라 개발을 어느정도 해왔던 사람에게도 유용한 책입니다.

 

구성

 

Chapter 1: 문제 해결

Chapter 2: 알고리즘 분석

Chapter 3: 해싱

Chapter 4: 힙

Chapter 5: 정렬

Chapter 6: 이진 트리

Chapter 7: 그래프

Chapter 8: 정리

 

개인적인 생각으로 학습은 알고리즘을 처음 접하시거나 프로그램 코딩자체를 처음 접하시는 분들은 1장부터 시작하시면 좋을 것 같고 알고리즘에 대해 기본적인 지식이 있으시거나 프로그램 코딩을 할 줄 아시는 분들부터는 2장부터 학습하시는 것이 좋을것 같습니다.

 

개인적으로 약간의 단점이 어쩌면 욕심일수도 있는게 좀더 많은 실습 예제 및 비즈니스 케이스가 담겨있으면 더 좋았지 않았을까라는 아쉬움이 있습니다.

 

저의 리뷰를 읽어주셔서 감사합니다. 다음에는 좀더 유용하고 좋은 책을 소개하면서 더 나은 리뷰를 통해 여러분께 책을 소개시켜드릴 수 있도록 더 노력하겠습니다.




"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 
KakaoTalk_Photo_2022-06-26-23-49-13.jpeg
한빛미디어에서 출간된 "똑똑한 코드 작성을 위한 실전 알고리즘" 책은 해결하고자 하는 문제를 다양한 시각으로 풀어내는 능력을 키워내고, 효율적으로 소프트웨어를 개발할 수 있도록 하는 알고리즘을 꼼꼼히 기초부터 설명하여 실전에 잘 적용할 수 있도록 설명해냈다. 그렇기 때문에 프로그래밍을 어느정도 아는 사람을 독자로 삼았고, 파이썬 기반으로 알고리즘 개념들과 실전 문제들을 설명한다.
 
알고리즘은 예측 가능한 시간에 정확한 결과를 반환하는 컴퓨터 프로그램으로 구현된 단계별 문제 해결 방법이라고 한다. 알고리즘 연구는 정확성(해당 알고리즘이 모든 입력에 대해 동작하는가?)과 성능(해당 알고리즘이 주어진 문제를 해결하는 데 가장 효율적인 방법인가?)를 고려해야한다고 한다. 책에서는 총 8가지 챕터로 나눠 1장 부터 문제 해결, 알고리즘 분석, 해싱, 힙, 정렬, 이진 트리, 그래프 등을 다룬다. 

 

 
먼저 1장에서는 문제를 해결하는 여러 알고리즘들을 설명하고, 각 문제를 어떻게 해결해야하는지에 대한 방향성을 제시한다. 또한 문제 인스턴스 크기에 따라 실행 시간을 분석함으로써 성능 비교를 수행하고, 알고리즘에서 중요한 개념인 "시간 복잡도"와 "공간 복잡도"에 대해서 설명한다. 시간 복잡도는 크기가 N인 문제 인스턴스에서 알고리즘에 의해 실행된 주요 연산의 수를 계산하여 측정하는 것이고, 공간 복잡도는 문제 인스턴스의 크기 N에 기반해 알고리즘에 필요한 추가 메모리 공간을 나타내는 것이다. 여러 알고리즘 사이트에서 이 공간 복잡도와 시간 복잡도를 계산하는 것은 자주 등장하며, 알고리즘의 효율성을 판단하는 명확한 근거이기도 하다.
 
2장에서는 알고리즘에서 매우 중요한 개념인 시간 복잡도, 공간 복잡도를 나타내는 빅오 표기법에 대해 설명하고, 각 복잡도에 따라 어떻게 값이 증가되는지 자세히 설명한다. 3장에서는 해싱에 대해 다루며, 연결 리스트 자료구조, 배장 주소법, 해시 함수 등에 대해 예제를 통해 자세히 설명한다. 4장에서는 힙에 대해 다루는데, 큐와 우선순위 큐 데이터 타입 부터 시작해서 이진 힙에서 우선 순위가 가장 높은 값을 각 시간 복잡도 별로 제거하는 방법에 대해 설명한다. 5장에서는 가장 흔히 나오는 개념인 배열을 통해 정렬하는 방법에 대해 설명한다. 6장에서는 배열에 대한 내용을 배웠으니 재귀 자료 구조인 이진 트리를 연결 리스트와 함께 설명한다. 7장에서는 그래프에 대해 다루며, 알고리즘 문제를 풀 때 꼭 알아두어야 하는 깊이 우선 탐색, 너비 우선 탐색 개념을 배우게 된다. 8장에서는 지금까지 배웠던 내용에 대한 키워드들을 정리해두었다. 또한 파이썬 데이터 타입(백, 스택, 큐, 심볼 테이블, 우선순위 큐, 인덱스 최소 우선순위 큐)의 성능에 대해 자세히 설명해놓았으며, 파이썬 내장 데이터 타입들을 구현하는 방법에 대해 간략히 설명해두었다. 
 
이 책은 책 제목 처럼 지금 보다 더 똑똑한 코드를 작성하고 싶을 때 보면 큰 도움이 되는 책이며, 알고리즘 문제를 풀기 위해 참고해야할 필독서 중 하나라고 생각된다. 또한 깃허브에 예제 코드들을 수록해놓았으며, 각 장마다 등장하는 개념들을 확실하게 습득할 수 있도록 알맞은 예제 코드들을 포함하고 있으며, 각 문제에 대해 어떻게 접근하고, 어떤 개념을 이용하여 풀어내야하는지 자세히 설명해두었기에 강의를 듣지 않고 책만 보아도 이해될 수 있게 내용을 담았다는 느낌을 받았다. 코드의 효율을 향상하는 것은 더 효율적인 프로그램을 만드는데 많은 도움이 되기 때문에 코드 효율성에 대해 고민하는 사람이라면 이 책을 한번쯤 읽어보는 것을 추천한다. 
 

“한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.”

				
Learning Algorithm

 

아마 유명한 IT 업계로 취업하려는 사람들은 알겠지만 시중에는 정말 다양한 알고리즘 책들이 존재한다. 다양한 책들마다

나름대로의 내용을 풀어가는 방향이 다 다르다. 예를 들어서 어떤 책은 문제은행 식으로 많은 케이스들을 제공하고 이에 대한 해설을

제공하는 형태가 있다. 또 다른 책은 정렬이나 탐색, 그래프와 같이 문제를 푸는데 있어서 필요한 기본 지식들에 대해서 하나씩 다루는

형태로 되어있는 경우도 있다. 또 이 선택의 기준이 언어에 따라서 달라지는 경우도 있다. C++도 있고, 자바용도 있고,

파이썬도 있고... 아마 취향이나 취업할 회사의 성향에 따라서 알고리즘 책 선택의 기준이 달라질 것이다.

사실 이번에 소개할 책을 처음 선택한 이유는 어떻게 보면 앞에서 말한 책을 선택하는 기준 중

교집합에 해당하는 책이라고 생각했기 때문이다. 분량이 많지 않으면서, 문제에 필요한 기본 지식을 설명한 책을 원하고,

이를 파이썬으로 설명되어 있는 책을 찾는 사람, 특히 나같은 경우는 언젠가는 봐야하는 SW역량인증시험 준비를 위해서

간단하게 살펴볼만한 책이라고 봤다. 참고로 책에서 다뤄지는 내용은 다음과 같다.

  • 파이썬 기본자료형을 활용한 문제 해결
  • 복잡도를 통한 알고리즘 분석
  • 해싱
  • 정렬
  • 이진트리
  • 그래프

그런데 책을 읽으면서 느낀 점은... 처음 알고리즘을 배우려는 사람이 보기보다는 한번씩 기본내용을 훑고 다시 복습하려는

사람이 보면 좋을것 같다는 생각이 들었다. 물론 책의 내용이 구현하는 부분이나 일반적인 알고리즘 책에서 소개할법한

내용들도 다루기는 하지만, 그보다도 "이런식의 접근 방법을 했을 때는 결과가 어떻게 바뀔까?", "해당 알고리즘에서는

어떤 오류가 있는데, 왜 날까?" 하는 식의 설명들이 많이 포함되어 있다. 물론 기본 내용만 살피려는 사람에게는 어려운

내용일 수도 있겠지만, 뭔가 알고있는 지식에 대한 생각의 여지를 부여한다고 할까.. 그런 느낌이 많이 들었다.

출처: https://talkingaboutme.tistory.com/entry/Book-Learning-algorithm [자신에 대한 고찰:티스토리]

Learning Algorithms

조지 하이네만 지음

윤대석 옮김

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

2022년 6월

2022 나는 리뷰어다 활동의 다섯 번째 리뷰

 

6월에 리뷰할 책은 "Learning Algorithms"이다.

가볍게 300페이지 좀 안 되는 책은 알고리즘을 공부하고자 하는 이에게 좋은 책이라 생각되며,

파이썬을 조금 공부해보셨던 분이라면 더 좋은 책일 것이다.

 

저자는 소프트웨어 엔지니어링 및 알고리즘 분야에서 20여 년간 경험을 쌓은 컴퓨터공학과 교수다. 내용이 조금 딱딱하진 않을까 했지만 옮긴이 윤대석 님이 잘 옮겨주신 것 같다. 현직 엔지니어로서 알고리즘과 운영체제를 꾸준히 공부하시는 분이시고, [쓰면서 익히는 알고리즘과 자료구조]의 저자이다. 

 

알고리즘의 중요성이란 몇 번을 말해도 지나치지 않다.

컴퓨터 과학의 핵심이자 정보화 시대의 필수 요소로서, 수많은 분야의 인터넷 요청에 사용되고 있다.

컴퓨터 과학 내에서 알고리즘을 발견하고 적용할 수 있는 공부를 하는 것은 쉽지 않다.

대부분 수학적 증명과 컴퓨터 과학 개념을 강조하기에 효율적인 공부가 어렵다.

 

하지만 이 책은 코드에 당장 적용해 효율을 향상해주는 다양한 알고리즘을 소개하며 파이썬으로 작성된 예제 코드를 제공한다.

현재 파이썬은 다양한 분야에서 사용되며, 가장 인기 있고 사용자 친화적은 프로그래밍 언어 중 하나이다.

책에서는 알고리즘을 최대한 시각화하고 상세한 설명으로 독자의 개념 이해를 돕는다.

 

컴퓨터 과학에서 사용되는 자료구조와 기본 알고리즘을 알려주기에 효율적인 프로그래밍 작성이 되도록 도와줄 책이며, 코딩 인터뷰를 준비하는 개발자와 지망생에게도 좋은 가이드가 될 것이라 조지아 공과대학교의 즈비 갈릴리 명예 컴퓨팅 학장은 추천을 해주었다.

 

사실 실무에 종사중인 개발자에게 알고리즘의 학습은 꼭 필요한 공부가 아니라고 생각할 수도 있다.

하지만 알고리즘을 학습하게 되면 해결하고자 하는 문제를 다양한 시각으로 풀어내는 능력을 키울 수 있고, 좀 더 효율적인 소프트웨어를 개발할 수 있다는 장점이 있다. 이 책은 알고리즘이 어떻게 구성되는지 단계별로 꼼꼼히 설명해 기초를 실전에 잘 적용하도록 이끌어준다.

알고리즘 분야는 방대하기 때문에 이 책을 시작으로 접하면 아주 좋을 것이다.

 

책에서 다루는 내용에 대해서 살펴보자.

기본 타입을 사용해 정보를 구성하는 방법부터 시작하여, 자료구조에서 직접 작동하는 알고리즘, 스택이나 우선순위 큐와 같은 기본 추상 데이터 타입에 의존하는 복잡한 알고리즘까지 다양한 알고리즘이 어떻게 성능을 달성하는지 이해를 돕도록 하고 있다.

 

책의 본문 일부를 보자.

그림을 통해 독자의 이해를 돕고, 표를 통해 확실하게 비교를 할 수 있도록 도와주고 있다.

직접 코드를 치면서 이해를 하고, 각 챕터마다 마지막엔 연습 문제를 통해 문제 해결 능력을 키워주고 있다.

 

시중에 많은 알고리즘과 자료구조 관련한 책이 많지만, 이 책은 알고리즘 공부를 시작하는 사람에게 아주 적합한 책이 될 것이다.

비교적 친근한 파이썬이라는 언어를 사용하는 것도 큰 장점이 될 것 같다.

 

알고리즘 공부, 이젠 진짜로 시작해 봅시다.

 

Love Yourself.

	

이 책은 컴퓨터 과학 전공생 대상이 아니라, 쉽게 쓰여서 다양한 배경의 독자들을 대상으로 한다. 단, 파이썬 언어는 알고 있는 상태인 것이 좋다.

알고리즘 하나 하나를 차근차근 그림과 함께 설명해준다. 알고리즘의 기본 원리부터 배우길 원하는 나에게 딱 맞는 책이었다.

다만, 당장 문제 풀이가 목적인 사람들에게는 맞지 않을 것 같다. 제목에 나와있듯 똑똑한 코드 작성을 위한 것이라는 설명이 딱 맞다.

알고리즘을 설명하고 나서, 코드 몇 줄을 작성해야하는가? 저장공간은 추가로 얼마나 드는가? 하고 해당 알고리즘을 선호하는 요인을 따지고 있다. 

이 책에서 기본 원리를 확실히 잡고나면 다른 응용이 두렵지 않을 것 같다. 완독 후 효율적인 문제 풀이용으로 다른 책을 보거나 실전 문제를 연습하면 좋을 것 같다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

전공을 시작 할 때만해도 파이썬은 알고리즘 공부나 대회 준비에 적합하지 않다는 인식이 강했습니다. 제가 가지고 있는 다른 알고리즘 서적들만 해도 C와 cpp가 각 2권씩입니다. 자료구조나 파이썬의 신텍스 슈가 등 때문에 파이썬 자료구조와 알고리즘 책을 시장에서 거의 찾아볼 수 없었습니다.

책이 한 장 한 장 넘어가면서 파이썬이 알고리즘 공부에 별로라는 생각은 편견이라는 걸 다시 느꼈다. 알고리즘에서 중요한 점은 문제 풀이를 위한 논리적인 사고 과정과 사고 과정을 코드로 옮기는 과정이지 구현하는 언어의 문제가 아니었다. 알고리즘의 특성에 따라 특정 언어가 더 좋은 퍼포먼스를 보여 줄 수는 있어도 구현 할 수 없는 언어는 없습니다.

이 책의 제일 큰 장점은 파이썬으로 코드가 작성되었다는 것 입니다. 파이썬도 깊게 들어가면 상당히 어려운 언어이지만 인터프리터에 사용자 친화적인 언어여서 C나 CPP로 작성된 코드보다는 상대적으로 읽기 편합니다. 최근들어 언매니지드 언어로 입문하고 특히 JS나 파이썬 입문자가 많아 쉽게 접근하기 좋습니다.

또 파이썬을 파이쏘닉하게 이용해 알고리즘 구현을 하고 있어 알고리즘과 파이쏘닉한 프로그래밍을 배울 수 있는 책입니다. 모든 실습을 동반한 책이 그렇지만 단순히 보고 따라치는 학습이 아닌 고민하며 이해하는 실습을 겸하면 알고리즘과 파이쏘닉 두 마리 토끼를 잡을 수 있는 책입니다.


한빛미디어 2022 도서 서평단 "나는 리뷰어다"의 일원으로 도서를 제공받아 작성한 리뷰입니다.

직업 특성상 많은 양의 데이터를 사용하게 되는데, 이러한 과정에서 알고리즘을 잘못 선택해 코딩하게 된다면, 몇 분 내로 끝날 작업이 몇시간이 걸리는 일이 생길 수도 있다.

 

최근에는 코딩을 하며 어떻게 코드를 효율화 시킬수 있을까?’를 많이 고민했다. 그것이 바로 뛰어난 개발자의 스킬이기 때문이다. 하지만 이런 것들을 어디서 쉽게 배울 수 있는지를 몰랐고, 이번에 이 책을 읽으면서 그 답을 알게 됐다.

 

알고리즘이란, 예측 가능한 시간에 정확한 결과를 반환하는, 컴퓨터 프로그램으로 구현된 단계별 문제 해결 방법이다. , 어떻게 문제 해결 프로세스를 세울지를 고민하는 과정이다. 나는 지금까지 생각나는 아무 코드나 입력하면서 실행이 잘 되면 넘어가는, 그런 막연한 방법을 사용하였다.

 

단순한 함수의 MAX()에 대해서도, 오름차순인지 내림차순인지 등에서도 차이가 생기는 것이 신기했다.

 

특히 이를 체계적으로 공간 복잡도(필요한 메모리의 양), 시간 복잡도(연산을 얼마나 많이 했는지)를 사용해 풀이한 것이 인상깊었다.

 

이를 통해 항상 그때그때 배열 크기를 추가하거나, 한번에 계산될 연산을 나눠하는 등의 코딩 방식으로 쓸데없는 시간이 많이 들어간 것이 문제라는 걸 알게 되었다.

 

이 외에도 정렬 방식에 있어서 분할 유무, 시작 지점 등에 따라 연산 능력이 천차만별로 달라지는 것을 깨닫고, 올바른 알고리즘 선정의 필요성을 알게 되었다.

 

어느 정도 코딩을 할 줄 아는 실력이 된다면 흥미롭게 읽을 수 있는 책이라고 생각한다. 특히, 조금이라도 코드의 성능을 끌어올리려면 특히 권장한다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

최근 IT업계의 코딩 테스트 기반의 채용 프로세스 덕분에 코딩 테스트를 위한 문제 해결과 알고리즘 풀이 관련 서적에 최근 많은 분들이 관심을 갖고 있고, 그 수요 덕분에 많은 관련 서적들이 나와 있습니다. 전산 전공자라면 학부시절 접했을 만한 전형적인 알고리즘과 자료 구조 수업용 대학 교재부터, 채용 면접을 앞둔 분들이 관심을 가질 만한 채용을 위한 코딩 테스트를 전문적으로 다루는 알고리즘 서적까지 다양한 종류의 서적들이 서점에 나와 있어 필요와 취향에 맞춰 골라 볼 수 있는 혜택을 보고 있는 듯 합니다.

 

이 책은 최근 나온 트랜디한 알고리즘 서적 보다는 대학 교재에 가까운 구성과 내용으로 이루어져 있습니다. 저자가 대학교수인 것으로 봐서 자신의 수업에 사용하기 위해 만든 느낌의 책인데, 알고리즘 대학교재로서 정석적이고 교과서적인 순서와 전개로 진행되지만, 트랜디한 파이썬을 구현 언어로 사용하고 있고 전형적인 딱딱한 대학교재처럼 나열식 전개가 아닌, 마치 정말 저자의 수업을 듣는 것처럼 무엇을, 왜, 어떻게를 계속 반복하며 의문과 필요를 던져가며 내용이 심화되는 대화식 전개로 구성되어 있습니다. 개인적으로 최근 읽은 알고리즘 및 코딩 테스트 서적들이 뭐랄까 문제 풀이 자체에만 집중한 느낌이 있어 아쉬운 점이 있었는데 최근 트랜드와는 다르게 이 책은 대학교재가 늘 그래왔듯 문제 풀이는 연습문제로 독자에게 떠 넘기고(...) 근본적 개념과 학문적 설명에 집중하고 있어 인상적이었습니다. 분명 상대적으로 읽기 어려운 부분이 적잖이 있습니다만 최근 알고리즘 서적 중에는 특출난 강점이라 생각되었습니다.

 

알고리즘 서적으로서 정석적인 내용을 담고 있고 번역도 잘 되어 있습니다.  실제로 알고리즘 입문서라고 되어 있긴 합니다만, 비전공자 혹은 관련 지식이 없는 분이라면 조금 읽기 불편할 수 있는 책이라고 개인적으로 생각되어, 완전 초보자 보다는 깊이 있는 내용을 다루는 알고리즘 입문서를 원하는 분들에게 추천드리고 싶습니다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

 

요즘은 코드를 상위 레벨에서 손쉽게 짤 수 있으면서도 성능도 그렇게 밀리지 않는 Go나 C#같은 좋은 언어들이 많다. 이런 언어들에는 우리가 많이 사용하는 자료구조, 알고리즘 등이 이미 최적화된 상태로 구현되어 내장되있기 때문에 실무에서 실제로 알고리즘을 직접 구현하게 되는 경우는 그렇게 많지 않다. 나같은 경우에도 신입사원으로 처음 입사하기 전 서류통과를 위해 코딩테스트를 준비했을 때와 학부 수업을 들었을 때를 제외하곤 알고리즘을 깊게 파본 경험은 전무한 것 같다. 학부수업에서 들었던 알고리즘 수업에 대한 기억을 더듬어 가보면 무수한 수학적 증명과 컴퓨터과학 개념이 혼재되어 매우 따분하고 지루했던 경험이 있다.

이 책의 경우 자주 사용되는 주요 알고리즘인 해싱, 힙, 정렬, 이진트리, 그래프와 관련된 다양한 주제를 다루고 이를 쉬운 스크립트 언어인 파이썬을 통해 실제로 구현해보면서 익힐 수 있게 도와준다. 학술적으로 엄밀한 알고리즘 정의들을 배우기보다는 실제 현업에서 어떤 알고리즘들이 존재하고 이를 어떤 상황에 쓰면 좋을지 알려주는 cookbook 느낌의 핵심요약서라고 생각된다. 만약 현업에 종사하면서 핵심 알고리즘에 대해 한번 리마인드가 필요한 경우나 이직을 위해 알고리즘 공부가 필요한 경우 해당 도서가 도움을 줄 수 있을거라 생각한다.

[똑똑한 코드 작성을 위한 실전 알고리즘] 한빛미디어 서적

알고리즘을 공부하는 학생 입장에서 어렵게 느껴질 수 있는 부분은 이론과 실전의 연결고리라고 생각한다. 이진 배열 탐색, 해시 함수, 스택과 같은 알고리즘을 이론적으로 이해해도 이것을 코드화 시키는 것은 또 다른 문제이다. 반대로 코드를 잘 짜는 학생도 이론을 이해 못한다면 알고리즘을 구현할 수 없다. 실제로 내가 사용했던 알고리즘 교과서는 이론 서적과 실전 서적이 별개였고, 당시 C언어(…)를 갓 입문한 나로써는 이론도 가뜩이나 어려운데 이걸 구현하라고 매주 자동 채점되는 코딩 과제 잔뜩 내시는 교수님이 너무 버거웠던 기억이 난다.

이 책에서 두드러지는 특징이 이 부분을 도와준다는 것이다. 이론을 컴퓨터 언어로 옮기는 과정의 중간다리를 만들어준다. 구체적으로는 이론 -> 이론 시각화 -> 코드 구현 방법까지의 프로세스를 순서대로 소개해준다. 이 책에서 코드 구현은 Python을 사용하였다. 사진으로 책 주요 구성을 살펴보며 포스트를 짧게 마무리하겠다.

힙 알고리즘 이론 내용
힙 알고리즘 예제 그림 설명
힙 알고리즘 Python 구현 방법 설명
알고리즘 복잡도 설명

위 사진들처럼 알고리즘을 예시와 함께 구체적으로 코드화 시키기까지의 내용을 꼼꼼하게 담고 있다.

이 책은 기본적으로 학부에서 다루는 알고리즘 범위를 다룬다. 그러나 기본적인 알고리즘 원리 및 코드 실현 외 심화적인 내용은 포함하지 않는다. 알고리즘 기본 단계에서 이론으로 코드화 시키는데 어려움을 겪는 학생들이 차근차근 공부하면 자신감이 생기는 데 도움될 것 같다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

 

자료구조, 알고리즘 기초를 알고 계신 분들이 다시 개념을 살펴볼 때 좋은 책이라고 생각됩니다.

책의 두께에 비해 상당히 많은 주제들이 정리되어 있으며, 수도 코드와 그림을 사용해 순차적으로 알고리즘이 실행되는 과정을 논리적으로 설명하는 스타일입니다.

 

책의 내용을 바탕으로 개념을 이해하고 스스로 구현해 본다면 많은 도움이 될 거라고 생각됩니다.

(스스로 구현해 본 후 꼭 저자의 깃헙에 있는 잘 작성된 코드와 비교해 보세요)

특히 자료구조와 알고리즘은 워낙 내용이 방대해, 책의 두께나 복잡한 구성에 질려서 중간에 포기하는 경우가 많았는데 이 책은 간결하게 주요 내용만 정리가 되어 있어 좋았습니다.

 

자료구조, 알고리즘을 다시 공부해 보려고 하는 모든 개발자 분들에게 추천드립니다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

살짝 난이도가 있어 파이썬으로 알고리즘을 처음 접하는 분보다는, 한 번 이상 알고리즘 공부를 해본 분께 알맞을 듯한 책입니다. 개인적으로는 자료구조와 알고리즘 공부를 한 적이 있지만 책의 내용이 쉬운 난이도로 느껴지지는 않았습니다. 내용적인 면에서는 - 알고리즘의 성능 - 이진 배열 - 해싱 - 힙 - 정렬 - 이진 트리 - 그래프 - 스택, 큐 - 이후에 학습하면 좋을 내용 까지 다뤄주어 기본에 충실하면서도,심화적인 내용이 코드와 도해로 잘 나타나 있다고 생각합니다. 알고리즘적인 측면에서 파이썬 코드를 성능 효율적이게, 똑똑하게 작성하고 싶은 분께 이 책을 추천합니다. 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

똑똑한 코드 작성을 위한 실전 알고리즘
조지 하이네만 지음 | 윤대석 옮김 | 한빛미디어
(http://www.yes24.com/Product/Goods/109554881)

알고리즘 서적을 리뷰하는 건 오랜만인 것 같습니다. 대학생, 대학원생 신분을 벗어나 IT 개발자, 직장인으로 살아온 이후로 알고리즘 서적을 읽을 기회는 많지 않았습니다. 현재 담당하고 있는 개발 업무와 관련된 도메인 서적을 읽는 시간이 월등히 많았으니까요, 많은 개발자분들이 그럴거라 생각합니다. (직접적으로 꾸준히 알고리즘 최적화 등의 개발을 하지 않는 한 말입니다.)

이 책의 목차는 다른 알고리즘 도서와 유사합니다. 알고리즘의 문제해결 전략, 복잡도, 성능에 관한 글과 주 자료구조, 알고리즘에 대한 설명입니다. 목차 내용은 크게 아래와 같습니다.

목차

CHAPTER 1 문제 해결

1.1 알고리즘이란
1.2 리스트에서 가장 큰 값 찾기
1.3 주요 연산 횟수 계산하기
1.4 모델로 알고리즘 성능 예측하기
1.5 리스트에서 가장 큰 두 수 찾기
1.6 토너먼트 알고리즘
1.7 시간 복잡도와 공간 복잡도
1.8 요약
1.9 연습 문제

CHAPTER 2 알고리즘 분석

2.1 경험적 모델로 성능 예측하기
2.2 곱셈 성능 예측하기
2.3 성능 클래스
2.4 점근적 분석
2.5 모든 수행 계산하기
2.6 모든 바이트 계산하기
2.7 이진 배열 탐색
2.8 이진 배열 탐색으로 리스트에서 값 찾기
2.9 이진 배열 탐색의 또 다른 기능
2.10 알고리즘 성능 비교
2.11 곡선 피팅 vs. 상/하한
2.12 요약
2.13 연습 문제

CHAPTER 3 해싱

3.1 키와 연관된 값
3.2 해시 함수와 해시 코드
3.3 (키, 값) 쌍에 대한 해시 테이블 구조
3.4 선형 조사로 충돌 검출 및 해결하기
3.5 연결 리스트를 사용한 분리 연쇄법
3.6 연결 리스트에서 엔트리 삭제하기
3.7 개방 주소법과 분리 연쇄법 평가하기
3.8 동적 해시 테이블
3.9 동적 해시 테이블 성능 분석하기
3.10 완벽한 해싱
3.11 (키, 값) 쌍 순회하기
3.12 요약
3.13 연습 문제

CHAPTER 4 힙

4.1 최대 이진 힙
4.2 (값, 우선순위) 삽입하기
4.3 우선순위가 가장 높은 값 제거하기
4.4 배열로 이진 힙 구성하기
4.5 엔트리 이동의 구현
4.6 요약
4.7 연습 문제

CHAPTER 5 정렬

5.1 교환을 통한 정렬
5.2 선택 정렬
5.3 성능이 O(N2)인 정렬 알고리즘의 구조
5.4 삽입 정렬과 선택 정렬의 성능
5.5 재귀와 분할 정복
5.6 병합 정렬
5.7 퀵 정렬
5.8 힙 정렬
5.9 O(NlogN) 알고리즘의 성능 비교하기
5.10 팀 정렬
5.11 요약
5.12 연습 문제

CHAPTER 6 이진 트리

6.1 시작하기
6.2 이진 탐색 트리
6.3 이진 탐색 트리에서 값 탐색하기
6.4 이진 탐색 트리에서 값 제거하기
6.5 이진 탐색 트리 순회하기
6.6 이진 탐색 트리 성능 분석하기
6.7 자가 균형 이진 트리
6.8 자가 균형 이진 트리 성능 분석하기
6.9 이진 탐색 트리를 (키, 값) 심볼 테이블로 사용하기
6.10 이진 탐색 트리를 우선순위 큐로 사용하기
6.11 요약
6.12 연습 문제

CHAPTER 7 그래프

7.1 그래프로 문제 모델링하기
7.2 깊이 우선 탐색으로 미로 풀기
7.3 너비 우선 탐색으로 미로 풀기
7.4 유향 그래프
7.5 가중치 그래프
7.6 다익스트라 알고리즘
7.7 모든 쌍의 최단 경로 문제
7.8 플로이드-워셜 알고리즘
7.9 요약
7.10 연습 문제

CHAPTER 8 정리

8.1 파이썬 내장 데이터 타입
8.2 스택 구현하기
8.3 큐 구현하기
8.4 힙과 우선순위 큐 구현
8.5 이후 학습

필수로 읽었으면 하는 목차 Chapter 1/2

알고리즘을 학습할 때 많은 분들이 가장 앞 쪽에 있는 서론을 생략하는 경우가 있는 것 같습니다. 간혹 신입개발자 분들과 대화 시 나타나는 상황이 있습니다. 시간복잡도와 공간복잡도에 대해 대화를 하는 경우 복잡도에 대한 건 들어봤지만 정확히 각 알고리즘 별로 어떻게 계산해야하는지 왜 그런 복잡도가 나오는지 잘 모른다는 것입니다. 특히 본인이 작성한 알고리즘에 대해서 복잡도 계산을 하지 못하는 경우가 있었습니다.

어떤 알고리즘은 NLogN 이고, 어떤 알고리즘은 N이다. 라는건 암기를 하고 있지만 왜 그런지에 대한 이해는 부족한 경우가 많았습니다. 자료구조, 알고리즘에 대해 많이 아는 것도 좋지만 현업에서 본인이 작성하는 코드의 시간,공간복잡도에 대해 계산하고 이해하는 능력도 매우 중요하다고 생각됩니다.

그러한 이유로 이 책의 Chapter 1,2 는 꼭 읽으셨으면 좋겠습니다. 특히 그림과 예제로 쉽게 설명이 되어 있으므로 부담갖지 말고 읽으면 좋을 것 같습니다.

그림 예시를 통한 상세한 내용 전달

해시, 힙, 정렬 등 여러 알고리즘을 데이터, 코드 기반으로 이해하기는 초보자에게 어려운 일일 수 있습니다. 이 책을 추천하고 싶은 가장 큰 이유는 그림을 통한 데이터, 알고리즘의 흐름을 쉽게 파악할 수 있다는 것입니다.

위 처럼 스택의 내용을 가시화하여 보여주는 그림입니다. 스택 뿐만 아니라 트리, 정렬 등 다양한 알고리즘의 동작원리를 쉽게 이해할 수 있도록 저자는 많은 내용을 가시화 하여 전달하고 있습니다. 또한 알고리즘의 대한 성능을 표로 객관화하여 보여줍니다. 표로 전달하는 방식은 다른 책에서도 발견할 수 있으나, 파이썬 모듈을 이용한 알고리즘 동작방식에 대해서도 표로 제공해 주고 있다는 점은 파이썬을 이용하여 개발하는 분들에게는 조금 더 도움이 되지 않을까 합니다. (저 같은 경우에는, C++로 코드를 재작성하여 공부하였습니다.)

이 도서를 입문자 분들에게 추천! 연습문제는 꼭 풀자!

입문자분들이 알고리즘,자료구조 도서를 검색 시 많은 서적이 나옵니다. 내용과 그림, 번역까지 모두 깔끔하여 쉽게 읽을 수 있고 Github에서 코드도 제공하기에 테스트 및 공부하기에도 효율적입니다.

특히 제공되는 연습문제는 쉽게 넘어가는 것 보다는 조금 생각해보고 성장할 수 있는 작은 도움이 될 수 있는 문제들입니다. 꼭 생략하지 말고 풀어보면 더욱 좋을 것 같습니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

알고보니 저자가 컴공과 교수님이셨네요. 어쩐지..

전체적인 알고리즘들은 학부때 배우는 알고리즘들이지만, 기본적으로 알고있어야 하는 필수 알고리즘들이라서

전공자라면 기본기를 다시 탄탄히 할 수 있고, 비전공자들에게는 특히 꼭 추천드리고 싶습니다.

이미 수많은 자료구조 & 알고리즘 책들이 있는데, 이 책의 가치는 무엇일까? 초보자를 위해, 정말 자주 사용될 부분만 집중적으로, 하지만 다른 초보자들 책에 비해 더 깊게 파고들었다는 점이 특징이라고 생각한다.

대상 독자가 초보자라는 점은 여러가지로 드러나지만, 단적으로 이 페이지만 봐도 알 수 있다. 알고리즘 책에 빠질 수 없는 시간복잡도를 설명하면서 O(NlogN)의 읽는 법을 알려줄 정도로 저자는 입문자를 대상으로 책을 썼다는 점을 알 수 있다.

책은 알고리즘이 뭔지, 복잡도가 뭔지 설명하고, hash, heap, sort, binary tree, graph라는 정말 자주 사용되는, 또한 기본적인 자료구조 & 알고리즘을 한 챕터씩 설명한다. 목차를 보고 든 첫 인상은, 혹시 저자가 interview를 준비하는 사람들을 위해 이런 구성을 선택했나? 하는 생각을 할 정도로, 기초적인 (동시에 매우 중요한) 부분에 집중했다는 생각이다. 실제로 그동안 했던 coding interview를 생각해보면, 주제들이 O(N), hash, sort, binary tree, heap등이 자주 나오고 graph만 해도 보기 쉽지 않으며, 가끔 dyanmic programming을 경험했었다.

앞서 이야기했지만, 다른 책과 좀 차별화되는 점은 하나 하나의 주제를 좀 더 깊게 파고든다는 점이다. 예를 들어 sort에서 tim sort를 다루거나 binary tree에서는 AVL tree를 설명하는 등 완전 초보용으로 보기에는 약간 난이도가 있는 부분까지 설명한다.

책의 마지막에서도 이야기하지만 이런 초보자용 알고리즘 서적은 정말 다양하고 풍부한 알고리즘 세계의 시작에 불과하며, The Art of Computer Programming은 여전히 프로젝트가 진행중이다. 이 책은 이런 알고리즘 세계로 가는 좋은 시작점이다.

한빛미디어 ‘나는 리뷰어다’ 활동을 위해서 책을 제공받아 작성된 서평입니다

안녕하세요 마개입니다.

이번에는 알고리즘 책에 대해 소개드리고자 합니다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

 

도서 소개

 

x9791162245644.jpg

● 도서명 : 똑똑한 코드 작성을 위한 실전 알고리즘

● 지은이 : 조지 하이네만

● 옮긴이 : 윤대석

● 출판사 : 한빛미디어

● 출간 일자 : 2022-05-20

● 페이지 : 296쪽

● 가격 : 정가 19,800원

 

취업/코딩 테스트를 준비하거나 CS 기초지식을 쌓기 위해 알고리즘 공부를 시작하거나 일을 점점 오래 하다 보면 알고리즘의 중요성에 대해 점차 알기 시작한다. 시스템을 처음 구축한다거나 처리해야 하는 데이터가 적었던 시절에 개발을 하면 느끼지 못할 수 있지만 점차 데이터가 늘어나고 실시간 처리를 많이 요구하는 요즘 같은 상황에서 구축되어 있는 시스템의 속도가 느리다면 원인을 찾게 되고 알고리즘이 중요하다는 걸 느끼게 된다.

 

해당 책은 이러한 부분에 해결책을 제시해 줄 수 있는 책이다. 알고리즘은 매우 많은 종류가 있지만 그중에 중요한 것들을 토대로 이론에서 끝나지 않는다. 파이썬 코드를 예제로 해당 알고리즘이 흘러가는 방식, 그로 인해 나오는 속도까지 분석해서 독자들에게 알려준다.

 

파이썬 코드를 예제로 진행하기 때문에 기본적으로 프로그래밍 언어에 대한 지식이 필요하다. 파이썬을 예제로 하기 때문에 파이썬을 알면 가장 좋지만 다른 프로그래밍 언어에 대한 지식이 있는 사람이라면 파이썬 코드를 이해하는데 어려운 수준은 아니다. 다만 비전공자이자 프로그래밍 언어를 아예 모르는 상태라면 이해하는데 시간이 꽤 걸릴 수 있다.

 

예제에는 단순히 코드만 있는 것이 아니라 코드에 대한 설명과 해당 코드가 실행되는 과정을 나타낸 도식, 속도까지 보여주며 원리를 상세하게 설명하고 있다. 알고리즘을 시작하거나 어렵다고 생각하는 사람들에게 좋은 도서가 될 것이다.

 

 

 

 

 

 

 

5.jpg

 

 

개발을 하는 사람이라면 어느 시점부터 알고리즘에 관심을 가지게 되는 것 같다. 어느 순간 자신이 주먹구구식으로 개발을 해 왔다는 것을 느낄때 쯤 알고리즘을 익히면서 보다 깔끔하고 빠른 알고리즘을 적용하는 것에 신경을 많이 쓰는 것 같다. 하지만 시중에 다양한 알고리즘 관련 책들이 나와 있긴 하지만 대부분 개념적인 설명에 머물고 있는 것 같다. 그렇지 않다면 알고리즘이 psedo 알고리즘으로 되어 있어서 제대로 분석하기 어려운 경우도 많은 것 같다.

 

이 책은 그런 면에서 다른 책들과는 차이점을 보이는 것 같다. 일단 복잡한 수식이나 개념을 글보다는 그림과 예제로 설명한다. 또한 설명하고자 하는 알고리즘도 python 코드로 되어 있어서 python에 어느정도 익숙한 사람이라면 보다 쉽게 알고리즘을 이해할 수 있는 것 같다.  이 책을 접하는 사람은 적어도 프로그래밍을 조금이라도 해 본 사람일 것이다. 전혀 프로그래밍을 해보지 않은 사람이 이런 종류의 책에 크게 관심을 가지지는 않을 것 같다. 다만 이 책에서 설명하는 알고리즘을 좀 더 잘 이해하기 위해서는 어느정도 python 언어에 대한 경험이 있는 것이 좋을 것 같다는 생각이 든다.

 

책의 시작은 알고리즘에 대한 개념부터 시작한다. 한마디로 알고리즘은 예측 가능한 시간에 정확한 결과를 반화하는, 컴퓨터 프로그램으로 구현된 단계별 문제 해결 방법이라고 볼 수 있다. 여기서 중요한 키워드는 예측 가능한 시간과 정확한 결과, 단계별 문제 해결 방법인 것 같다. 알고리즘에 대해 설명하면서 다양한 문제 해결에 대한 예시를 1장에서 설명한다. 특히 시간 복잡도와 공간 복잡도에 대한 부분을 제대로 이해하고 넘어가야 할 부분이다. 2장에서는 알고리즘 분석에 대해 다룬다. 빅오 표현법을 사용해 알고리즘 성능을 분류하는 방법과 다양한 성능 등급에 대해 설명하고, 정렬 알고리즘을 통해 알고리즘 성능 분석 예를 제시하고 있다. 

 

3장부터는 실제 다양한 문제에 대한 알고리즘을 다룬다. 해싱, 힙, 정렬, 이진트리, 그래프 등 개발을 하다보면 적어도 한번쯤은 접하게 되는 영역에 대해 자세히 설명하고 있다. 이미 언급한 대로 각각의 알고리즘을 설명할때마다 그림과 예제가 있기 때문에 보다 직관적으로 알고리즘을 이해할 수 있는 것 같다.

 

5-1.jpg

 

이 책은 개발자가 본다면 가장 도움이 될만한 책이다. 하지만 전문 개발자가 아니더라도 프로그래밍 언어를 사용한 경험이 있는 사람이라면 이 책에서 언급하는 알고리즘을 어느정도 이해가능하다고 생각한다. 이를 통해 본인이 적용하고자 하는 영역에 알고리즘적인 개념을 추가해서 구현할 수 있지 않을까 생각한다. 알고리즘이란 개발자만의 영역이 아니라 어떤 문제를 해결하기 위한 논리적인 개념으로 볼 수 있을 것 같다. 즉 알고리즘의 개념 중  단계별 문제 해결 방법이 주된 요소 중의 하나라고 생각한다.  단계별 문제 해결 방법은 프로그래밍 언어로 구현할 수도 있고, 수식으로 표현할 수도 있고, 문장으로 표현할 수도 있을 것 같다. 이를 통해 문제 해결을 위한 단계를 차근차근 밟아가는 것이라고 생각한다. 이런 면에서 본다면 이 책은 문제 해결을 위한 알고리즘을 체계적으로 이해할 수 있도록 도와주는 유익한 책이라고 생각한다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

	

요즘음 들어서 알고리즘 관련 된 책을 많이 읽어왔다.

"Introducing Algorithm",

"Classic Computer Science Problem in Java",

"Advanced Algorithms and Data Structure"

 

다들 좋은 책인데... "Classic Computer Science Problem in Java"를 제외하면 

책도 두껍고 좀 원론적인 내용들도 많은 편이라 처음부터 끝까지 다 읽기는 조금 어려운 책이다.

 

그런데에 비해 "똑똑한 코드 작성을 위한 실전 알고리즘"은..
300쪽 남짓의 적은 사이즈에도 그림위주로 너무도 쉽게 설명해 준다.

Big(O), 해싱, 힙, 정렬, 트리 그리고 그래프.

중요한 알고리즘 ( 그리고 자료구조) 를 단계별로 쉽게 설명해 주다 보니 이해하기 쉽다.

마치 강의를 직접 듣는 느낌이랄까...

아쉬운점은.. 조금 더 많은 주제를 다루어 주었으면 어떗을까 하는 아쉬움이 들었다.

 

총평으로는 프로그래밍 초보자도 쉽게 알고리즘에 대해서 이해할 수 있게 잘 쓰여진 입문서이다.

아쉬운점은 조금더 많은 내용을 다루었었으면 하는 점이고..

책을 읽은 후 좀 더 다양한 알고리즘 문제를 보고 싶다면 "Classic Computer Science Problem in Java"
( Java 이외에 다른 언어로도 책이 쓰여져 있다.) 을 다음 책으로 추천해 주고 싶다.


한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다

 

 

저자: 조지 하이네만

 

 

#책소개

 

더 효율적이고 창의적인 코드 작성을 위한 알고리즘 사용법
어려운 개념이나 수식 없이 그림과 예제로 학습하기

좀 더 똑똑한 코드로 프로그램 성능을 향상하고 싶다면 이 책을 펼쳐보자. 이 책은 소프트웨어 개발에서 가장 많이 활용되는 핵심 알고리즘을 각각 언제, 어떻게 사용하면 좋은지 단계별로 상세히 알려준다. 알고리즘 진행 과정을 시각화한 그림과 함께 예제 코드를 한 줄씩 알기 쉽게 설명하며, 성능을 직접 측정해볼 수 있도록 실행 가능한 코드를 제공한다. 장마다 수록한 연습 문제는 문제 해결 능력을 향상해 코딩 인터뷰를 준비하는 데도 도움이 된다.
전문 개발자뿐 아니라 자신의 연구 분야에 알고리즘을 적용하려는 사람 모두에게 유용하다. 컴퓨터 과학에 관한 배경지식이 없어도 프로그래밍 언어를 다뤄본 경험이 있으면 충분하다. 예제 설명과 샘플 코드는 직관적이고 접근성이 높은 파이썬으로 작성되었다. 다양한 문제에 대한 접근 방식과 풀이법을 살펴보면서 알고리즘의 원리부터 응용 방법까지 확실하게 익혀보자

라고 교보문고가 말하더라.

 

 


 

# 이 책의 특징

 

1. 파이썬

우선 파이썬이 대세라고 해서 그런지.. 모두 파이썬만 씀.. 수요가 있으니까 책을 쓰는 것은 맞는데 조금 그렇다.

나는 C++, C#을 사용해서 그렇다. 하지만 나는 파이썬도 사용했지. 읽는데는 무리 없지만

참고하면 된다.

 

2. 구성

어느 책이랑 다를 바가 없는 구성이긴 하다. 다만 설명하는 방식이 조금 다르다는 느낌?

알고리즘 책 답게 문제를 푸는 방법이 아니라 근본을 설명해준다.

 

3. 용어설명

우선 처음 접하는 알고리즘이라면 이 책을 추천할만함. 설명 좋음

 

4. 내용이 그렇게 어렵지 않음

이미 아는 내용이 많을 수 있기에 중급자 이상이 배운다는 느낌보다는 복습이라는 느낌으로 접근하면 좋음

 


 

#후기

 

알고리즘을 잘 풀게 해준다고는 못하겠다.

다만 생각을 하고 풀 수 있게 한다. 다시 말하자면 끝까지 가게 되면 근본적인 마음가짐을 가진 사람이 이긴다.

이 책에 있는 방향성만 잘 지킨다면 잘 배워나갈 수 있을 것이다.

 

 


 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 


결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원 무료배송
닫기

리뷰쓰기

닫기
* 상품명 :
똑똑한 코드 작성을 위한 실전 알고리즘
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
똑똑한 코드 작성을 위한 실전 알고리즘
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
똑똑한 코드 작성을 위한 실전 알고리즘
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실

최근 본 상품1