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

한빛출판네트워크

알고리즘 인사이드 with 파이썬

86개 풀이로 문제 해결 능력, 사고력을 키우는 알고리즘 & 자료구조 입문서

한빛미디어

집필서

판매중

  • 저자 : 손혁제
  • 출간 : 2023-10-19
  • 페이지 : 628 쪽
  • ISBN : 9791169211550
  • 물류코드 :11155
  • 초급 초중급 중급 중고급 고급
4.6점 (34명)
좋아요 : 1

“17년 차 베테랑 개발자가 직접 풀고 해설한다!”

학생, 취준생, 주니어, 역량 개발이 필요한 모든 개발자를 위한

86개 문제 풀이로 사고력을 키우는 알고리즘 & 자료구조 입문서

 

오랫동안 많은 IT 기업은 인재를 선발하는 가장 효과적인 도구로 알고리즘 테스트를 활용해왔습니다. 문제 풀이와 개발 능력은 상관없어 보이지만, 알고리즘은 공부하면 할수록 구현 능력이 향상되고 논리력이 증가하는 '효율을 위한 도구'입니다. 

이 책은 범용성 높은 프로그래밍 언어인 파이썬을 활용해 코딩 테스트에 자주 등장하는 문제 유형 86개를 풀이하는 과정을 살펴봅니다. 17년 차 S/W 아키텍트이자 개발자인 저자가 알려 주는 실무에도 유용한 해결 코드를 따라가다 보면 사고력과 문제 해결 능력의 기반을 다질 수 있습니다.

 

알고리즘이 처음인 학생, 코딩 테스트를 앞두고 있는 취준생은 물론이고 역량을 개발하려는 현직 개발자까지 자신의 수준에 맞춰 개념을 학습하고 문제를 풀이할 수 있도록 기본 이론과 문제 풀이, 해설까지 꼼꼼하게 담았습니다.

 

알고리즘 인사이드_상세이미지_700.jpg

손혁제 저자

손혁제

임베디드, 애플리케이션, 서버까지 다양한 개발 경험을 가지고 있는 17년 차 개발자다. 대학원 때 Spencer Rugaber 교수의 Software Architecture 과목 수강 이후 꾸준히 고품질의 소프트웨어 개발에 관심을 가져왔고 이를 바탕으로 현대자동차에서 S/W 아키텍트 및 개발자로 일했다. 현재는 IT 서비스 개발 경험을 쌓고 싶어 LINE 앱을 위한 미디어 처리 마이크로 서비스를 개발하고 있다. 단말, 서버, 웹, 딥러닝, 머신러닝 등 가리지 않고 다양하고 양질의 소프트웨어를 구현하는 데 관심이 많다.

PART 1 파이썬 문법, 핵심만 뽑아보기

Chapter 01 파이썬 기본 문법

1.1 데이터 타입 

1.2 조건문과 반복문

1.3 함수와 람다 표현식 

1.4 고급 제어 

1.5 클래스 

1.6 멀티 프로세싱 

 

Chapter 02 정규표현식

2.1 search, match 

2.2 compile 

2.3 findall과 finditer 

 

PART 2 기본 자료구조와 알고리즘

Chapter 03 핵심 자료구조

3.1 스택 

3.2 큐 

3.3 원형 큐 

3.4 연결 리스트 

3.5 해시, 맵 

3.6 트리 

3.7 힙 

3.8 그래프 

 

Chapter 04 기본 알고리즘

4.1 정렬 

4.2 그래프 알고리즘 

4.3 문자열 검색 

 

PART 3 알고리즘별 문제 풀이Ⅰ

Chapter 05 재귀

5.1 왜 재귀인가? 

5.2 재귀 알고리즘의 동작 방식 

문제 01 홍수 채우기 

문제 02 이진 트리의 최대 깊이 

문제 03 괄호 생성하기 

문제 04 연결 리스트의 노드 교환하기 

 

Chapter 06 탐색

문제 05 미로 탐색 

문제 06 최솟값으로 목적지 찾기 

문제 07 생존 게임 

문제 08 자물쇠 열기 

문제 09 바다와의 거리 구하기 

문제 10 썩은 사과 

 

Chapter 07 공간

문제 11 공평하게 콩이 든 가방 

문제 12 나선 행렬 

문제 13 최소한의 벽돌 뚫기 

문제 14 일정 등록 

 

Chapter 08 순열과 조합

8.1 경우의 수 

8.2 순열 

8.3 조합

문제 15 문자열 순열 생성 

문제 16 중복 없는 조합 찾기 

문제 17 가장 가까운 시간 생성하기 

문제 18 숫자로 만들 수 있는 문자 조합 찾기

 

Chapter 09 배열

문제 19 필요한 회의실 개수 구하기 3

문제 20 겹치는 구간 병합하기

문제 21 총 공격 시간 계산하기 

문제 22 풍선을 모두 터뜨리는 데 필요한 화살 개수 

문제 23 최댓값의 부분 배열 찾기 

문제 24 두 수의 합으로 목표 값 찾기 

문제 25 단조 증가 수열 만들기 Ⅰ 

문제 26 유일한 단어 찾기

문제 27 배열의 중복 값 제거하기 

문제 28 레이블에서 가장 큰 값 찾기

문제 29 거스름돈 계산하기 

문제 30 단조 증가 수열 만들기 Ⅱ

문제 31 이상 거래 감지 

 

Chapter 10 정렬

문제 32 홀수와 짝수로 정렬하기 

문제 33 빈도에 따라 정렬하기 

문제 34 들쭉날쭉 정렬하기 

문제 35 맞춤 정렬하기 

문제 36 가장 많이 출현한 단어 정렬하기 

문제 37 대각 원소 정렬하기 

 

Chapter 11 검색

문제 38 이진 검색하기 

문제 39 정점 찾기 

문제 40 정렬된 행렬에서 r번째 값 찾기 

문제 41 회전된 배열에서 값 찾기 

 

Chapter 12 문자열

문제 42 가장 짧고 겹치는 문자열 찾기

문제 43 고유한 부분 문자열 만들기 

문제 44 UTF-8 검증기 

문제 45 최소 길이 부분 문자열 찾기 Ⅰ 

문제 46 최소 길이 부분 문자열 찾기 Ⅱ 

문제 47 중복 정보 통합하기 

문제 48 문자열 섞기 

문제 49 해시 값과 일치하는 부분 문자열 찾기 

문제 50 문자열로 팰린드롬 만들기 

문제 51 부분 문자열로 팰린드롬 만들기 

문제 52 문자열에서 애너그램 모두 찾기 

문제 53 팰린드롬이 되는 모든 경우의 수 찾기 

 

PART 4 알고리즘별 문제 풀이Ⅱ

Chapter 13 기본 자료구조 활용

문제 54 가장 긴 파일 경로 찾기

문제 55 보다 따뜻한 날 

문제 56 괄호 쌍을 만드는 데 필요한 괄호 수 구하기 

문제 57 괄호 내 문자열 뒤집기

문제 58 인접 노드와 위치 교환하기 

문제 59 연결 리스트 분할하기 

문제 60 연속된 노드의 그룹 개수 구하기

문제 61 k만큼 리스트 회전하기

 

Chapter 14 트리

문제 62 단계 순위 순회로 역방문하기 

문제 63 가장 긴 연속 증가 수열 찾기 

문제 64 트리의 최대 너비 구하기 

문제 65 경로 합으로 목표 값 찾기 

문제 66 전위 순회 결과로 트리 생성하기 

문제 67 이진 트리의 수직 순위 순회 

문제 68 유효한 이진 탐색 트리 찾기

 

Chapter 15 그래프

문제 69 최소 비용으로 모든 정점 연결하기 

문제 70 그래프의 사이클 유무 확인하기 

문제 71 두 정점 간 모든 경로 찾기 

문제 72 사이클이 없는 정점 찾기 

문제 73 네트워크 내 모든 단말 연결하기 

문제 74 핵심 도시 파악하기 

문제 75 네트워크 지연 시간 계산하기 

 

Chapter 16 숫자

문제 76 숨겨진 수열 찾기 

문제 77 k로 나눌 수 있는 쌍의 개수 

문제 78 총합이 k인 부분 집합 찾기 

문제 79 최댓값 리스트 생성하기

 

Chapter 17 동적 계획법

문제 80 최솟값으로 삼각형의 경로 구하기

문제 81 최대 크기의 정사각형 찾기

문제 82 비트 1의 개수 구하기 

문제 83 n을 만드는 숫자 조합의 수 

문제 84 최대 점수로 풍선 터트리기 

문제 85 가장 높은 점수로 이분할하기 

문제 86 최대 수익을 내는 구간 찾기 

 

부록

Appendix A 시간 복잡도 이해하기

Appendix B 컨벤션에 따른 코드 작성하기

 이 책의 구성

  • PART 1 | 파이썬 문법, 핵심만 뽑아보기파이썬 핵심 문법과 정규표현식으로 기본기를 다지는 데 꼭 필요한 것들만 살펴봅니다.
  • PART 2 | 기본 자료구조와 알고리즘스택, 큐, 트리, 검색, 정렬 등 개념부터 탄탄하게 다질 수 있습니다.
  • PART 3, 4 | 알고리즘별 문제 풀이실무에 유용한 것은 물론 코딩 테스트에서 가장 자주 볼 수 있는 유형의 문제 86개를 엄선해 꼼꼼한 해설을 곁들였습니다.
  • PART 5 | 부록: 시간 복잡도와 코드 컨벤션한 걸음 더 레벨업하고 디테일을 다지기 위해 알아 두면 좋을 시간 복잡도와 코드 컨벤션을 살펴봅니다.

베타리더의 한마디

 

이론 설명에서 한 발 더 나아가 문제를 명확히 정의하는 과정부터 알고리즘 고안과 구현 그리고 검증까지 전 과정을 체험해볼 수 있었습니다. 프로그래머라면 반드시 알아야 할 기본기인 알고리즘을 배우고 다양한 문제를 해결하면서 레벨업하기에 이 책은 더할 나위 없이 좋은 교재가 될 것입니다.

- 윤진수, 취업 준비생

 

이 책은 파이썬의 기본 문법부터 자료구조, 알고리즘 개념과 문제 풀이까지 모두 다루고 있어 실제 코딩 테스트 문제를 이해하고 적용하는 데 큰 도움이 되었습니다.

- 이장훈, 3년 차 데브옵스 엔지니어

 

파이썬으로 코딩 테스트를 준비하고 있다면 꼭 챙겨 보면 좋을 책입니다. 문제도 다양하고 특히 이해를 도울 그림이 풍부해서 기초를 꼼꼼하게 다지기에 좋았습니다.

- 류영표, 프리랜서 개발자 및 강사

 

예제가 많고 설명이 꼼꼼해서 주니어 개발자도 쏙쏙 이해할 수 있었습니다.

- 배윤성, 백엔드 개발자

 

파이썬 기본 문법부터 주요 자료구조와 알고리즘 개념은 물론이고 문제 유형도 다양하게 마련되어 있어서 코딩 테스트를 준비하는 분들에게 추천합니다.

- 박소현, 데이터 엔지니어

 

이 책은 알고리즘을 시작하기 위한 이정표가 되어 줍니다. 파이썬 문법과 알고리즘 이론, 문제 예제를 그림과 꼼꼼한 설명에 녹여 챕터를 하나씩 따라가다 보면 어느새 성장한 자신을 볼 수 있을 것입니다.

- 윤지원, 데브옵스 엔지니어

 

알고리즘을 공부하는 모든 분에게 필히 이 책을 추천드립니다. 상세한 그림과 구체적인 설명이 가득해 개념을 확실하게 공부하고 싶은 분에게 많은 도움이 될 것입니다.

- 이영은, 백엔드 개발자

 

파이썬 개발자가 아니어도 쉽게 읽을 수 있어 알고리즘과 자료구조를 익히려는 모든 분에게 권하고 싶습니다.

-      양우석, 현대자동차 머신러닝 엔지니어

 

이 책에서 다루는 알고리즘과 자료구조는 타 언어에서도 자주 사용하므로 언어와 무관하게 개념을 공부하고 싶은 개발자들에겐 무척 유용한 책이 될 것입니다.

-      최고운, 소프트웨어 엔지니어

 

좋은 학습서를 발견한 개발자는 훌륭한 방법을 찾을 확률이 높습니다. 이 책은 우선 꼼꼼함이 돋보입니다. 어떤 원리도 대충 넘어가지 않되 과하지 않게 분량을 조절해 적절한 난도의 책 한 권을 완성했습니다. 부디 이 책을 통해 많은 주니어 개발자가 파이썬이라는 좋은 언어를 제대로 다루는 개발자로 성장하길 바랍니다.

-      복종순, 메가존클라우드 매니저

 

이 책의 대상 독자

  • 개발 역량을 한 단계 높이고 싶은 주니어 개발자
  • 코딩 테스트를 앞두고 있는 취준생
  • 개발의 기본기를 탄탄히 다지고 싶은 대학생

 

예제 파일 다운로드

깃허브: https://github.com/rshon/algorithm-inside

화면 캡처 2023-12-05 094616.png

 

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

 

장점

1.   파이썬을 기반으로 자료구조와 알고리즘을 다뤄 복잡한 알고리즘과 자료구조를 이해하기쉽게 학습할수 있음

2.   코딩 테스트나 직무 면접을 준비하는 데 도움이 되는 86개의문제를 포함하여 실전 문제에 대한 풀이와 예제 코드를 제공하여 실습할 수 있도록 구성됨

3.   그림 설명이 이해를 돕고, 예제 코드와 함께실습이 가능하도록 구성되어 이론 학습을 더욱 쉽고 효과적으로 만들어줌.

단점

1.   없음

후기

1.   개발을 하다보면 데이터 처리면에서 코드를 어떻게 하면 더 효율적이게 구성할 수 있을까? 에 대해서 고민이 있을 때 알고리즘이 책이 많은 도움이 된다. 특히, 이 책의 경우 실전 중심의 구성되어 문제 해결과 구현에 초점을 맞춰 실전 중심의 구성이 되어 있으며 다양한문제 풀이로 독자들이 다양한 유형을 다룰 수 있는 장점이 있다. 특히 파이썬 기반으로 진행하기 때문에쉽게 접근할 수 있으며 시간이 부족한 취준생의 경우 빠르게 훓어 보기에 좋은 서적인거 같다.

 

학창 시절 나를 힘들게 했던 과목 중 하나는 '알고리즘' 과목이었다. '알고리즘' 교수님은 너무나 원론적으로만 수업을 진행했다. 책을 보고 이론만 피카소처럼 창의적으로 설명을 해놓고, 우리한테는 알고리즘의 결과를 프로그램으로 구현해 내라는 과제를 내곤 했다. 그래서 나는 알고리즘을 처음부터 끝까지 독학했다고 말할 수 있다.

지금도 느끼는 바지만 본인이 지식을 알고 있는 것과 남에게 지식을 알려준다는 것은 또 다른 영역이다. 그 교수는 자신이 많이 알고 있을지는 모르지만, 다른 사람이 알 수 있게 설명하는 능력은 부족했다. 그런 고민이 있는 후배가 있다면 나는 이 책을 소개해 주겠다.

좋은 직장의 개발자가 되기 위해서는 알고리즘 테스트를 보는 경우가 많다. 이 책은 그 알고리즘 테스트에 자주 출제되는 엄선된 86개의 빈출 문제를 먼저 설명한다. 그리고 그림으로 자세하게 부연 설명한다. 지구상에 수많은 코딩 언어가 출연했다가 사라지고 있다. 수많은 코딩 언어들도 효율적이고 사용자가 많이 사용하면 살아남고, 이용하지 않는다면 사라진다.

파이썬은 지금 지구상에서 코딩 언어로 제일 인기가 있는 언어 중 하나이다. 이 책은 이렇게 각각의 알고리즘 문제를 파이썬 코드로 구현해 놓았다.

이 책의 구성은 이렇다. 일단 개발 역량을 갖추는 데 필요한 알고리즘을 학습하고 훈련할 수 있도록 구성되어 있다. 기본 알고리즘 스택, 큐, 링크드 리스트, 해시, 트리, 그래프와 같은 자료구조와 정렬, 문자열 검색, 그래프 등을 다룬다. 이후에 이를 바탕으로 탐색, 재귀, 순열, 정렬, 동적 계획법 등 심화 알고리즘 순으로 배치했다.

코딩은 책만 눈으로 본다고 해서 절대 실력이 좋아지지 않는다. 코딩도 훈련의 영역이다. 물론 고난도의 창의성이 필요한 영역은 적성과 개인의 능력도 중요하다. 하지만 훈련을 통해서 어느 정도 이상까지의 코딩 실력을 늘릴 수 있다.

 

 

 

초보자이면서 코딩을 해보고 싶다면 알고리즘 연습은 필수적인 것이다. 책을 보면서 꾸준히 여러 번 연습해서 나의 것으로 만드는 연습을 한다면 반드시 실력이 좋아질 것이라고 생각한다.

 

 

20231130_202051.jpg

 

20231130_203205.jpg

 

20231130_202125.jpg

 

20231130_202157.jpg

 

20231130_202355.jpg

 

20231130_202422.jpg

▶이 책은 한빛 미디어 서포터즈로 책을 출판사로부터 지급받았지만, 내가 주관적으로 솔직히 작성한 서평입니다. ◀


 

 

2023년 10월에 출간된 한빛미디어의 <알고리즘 인사이드 with 파이썬>에 대해 알아보겠습니다. 이 책은 현대자동차에서 S/W 아키텍트를 담당했고, 현재 LINE에서 개발자로 근무하고 있는 손혁제 님의 저서입니다. 국내 서점에서의 평가 점수는 교보문고, YES24 그리고 한빛미디어에서 8점대 후반부터 9점대 중반까지 높은 점수를 받고 있습니다.

 

<알고리즘 인사이드 with 파이썬>은 약 630여 페이지로 구성되어 있으며, 휴대하기에는 다소 부담스러울 것입니다. 전자책 또는 태블릿이 있으신 분은 전자책으로 보는 것을 추천합니다. 참고로 필자는 전자책으로 봤습니다. 

 


한빛미디어의 도서 지원을 받아 작성한 리뷰입니다. 

한빛미디어에서 제공해 준 책을 읽고 작성했음을 밝힙니다.


 

 

이 책의 매력 포인트


이 책은 4부 17장으로 구성되어 있습니다. '파이썬의 기본 문법'부터 '정규표현식', 그리고 주요 자료구조와 기본 알고리즘을 소개합니다. 그리고 코딩 테스트에 자주 출제되는 주요 알고리즘을 문제 86개로 구성하였고 풀이하는 과정을 통해 자연스럽게 이해하도록 구성되어 있습니다. 

 

이 책은 제목에서 볼 수 있듯이 파이썬으로 구성되어 있습니다. 그러므로 파이썬을 모르는 분은 파이썬의 기본서를 먼저 살펴본 후, 이 책을 읽는 것이 좋습니다. 만약 다른 언어에 익숙한 분이라면 이 책의 1장과 2장에서 다루는 파이썬 기본 문법과 정규표현식 부분을 숙지하면 이후 진행에 큰 불편함을 없을 것으로 예상합니다만, 자신있는 언어로 구성된 책을 읽는 것이 더 좋을 것 같습니다. 

 

이 책은 제가 리뷰했었던 <코딩 인터뷰를 위한 알고리즘 치트시트>와 유사한 느낌이 들었습니다. 전개 방식이 매우 유사합니다만, 이 책이 특정 알고리즘 사이트의 문제 풀이집 같은 느낌이 더 강하게 들었습니다. 개인적으로 두 책을 비교한다면, <코딩 인터뷰를 위한 알고리즘 치트시트>가 더 나았습니다.

 

 

마치면서


최근 이런 성향의 책이 많이 출간되고 있는 것은 우리나라 기업에서 운영하고 있는 코딩 테스트의 한계이자 단점이라고 생각합니다. 고질적인 우리나라 시험의 단점과 한계들이 명확하게 보이기 시작한 것 같아 아쉽습니다. 

 

책의 구성에서 문제를 제시하고 정의한 후, 독자에게 생각할 수 있는 시간을 줄 수 있는 등의 편집 방식을 취했으면 더 좋았을 것 같습니다. 지면 관계상 어려운 부분이었다면, 책의 제목에 파이썬이 있으므로 앞 단락을 생략하고, 독자와 조금 더 인터렉티브한 형식으로 구성했으면 좋았을 것 같습니다. 

 

 

screencapture-blog-naver-rapperkjm-223277277471-2023-11-28-18_43_01-crop.png

 

 

 

 

 

     

 

이번에 리뷰하게 된 도서는 "알고리즘 인사이드 with 파이썬"이라는 제목을 가진 도서이다.

 

요즘은 워낙 많은 코딩 테스트 관련 책들이 많이 출간되었기에 해당 도서도 비슷한 느낌을 가졌을 것 같았다.

그런데 이전에 읽어보았던 몇권의 책들과는 다르게  생각보다 빠른 전개? 의 구성을 가진 것 같다는 생각을 하게 되었다.

 

이야기를 더 들어가기 전에 책의 첫인상은 강렬한 보라색과 다양한 선들로 나름 알고리즘의 복잡도를 표현하려고 했다는 생각이 들었다.

표지는 멀리서도 눈에 잘 띄게 제작한 것 같다.

 

하지만 도서의 전체적인 편집은 약간 올드한 느낌을 지울 수 없었다.

내가 대학다닐 때 사용하던 교재들의 글꼴이나 그림체 느낌이랄까?

편집의 세련됨은 느끼지 못했던 것 같다.

 

 

 

 

 

이 도서는 86개의 문제를 아래와 같은 구성으로 설명하는데 너무 많은 문제를 설명하려고 하다보니 전개가 빠르다고 느껴진 것도 한 몫 하는 것 같았다.

 

86개의 알고리즘 문제는 "재귀", "탐색", "공간", "순열과 조합", "배열", "정렬", "검색", "문자열", "트리", "그래프", "숫자", "동적 계획법"의 큰 카테고리별로 설명하고 있다.

 

구성은 "문제 제목", :"문제 정의""문제 해결", "해결 코드", "성능 분석(시간복잡도)"의 순서로 나열되어 있다.

문제 제목 밑에는 해당 문제의 난이도 , 키워드 힌트, 알고리즘 문제를 참고한 leetcode의 번호가 적혀 있다.

 

 

문제 정의를 한 후 페이지 흐름상 바로 문제 해결에 관한 방향 및 방법들을 설명하고 파이썬으로 해결을 위한 코드를 보여주고 있다. 

어떻게 보면 leetcode 문제 해설집 같다는 생각이 들었다.

 

과거에 다른 책들은 문제를 제공하고 해설이나 답을 제공하지 않거나 같은 페이지에 넣지 않고 조금 더 생각해보라는 형태로 맨 뒷장이나 별도로 해설집을 넣어 놓은 경우도 봤었는데 저자의 해설이 궁금한 사람이라면 위와 같은 구성도 마음에 들거라 생각이 되었다.

 

나는 항상 이렇게 생각해왔다.

주어진 문제를 푸는 방법이 한가지만 있지는 않을 것이다.

즉, 주어진 문제에 대한 다양한 사람들의 바라보는 시각, 접근 방법들을 간접 체험해보는게 중요하다고 본다.

그런면에서 이 책은 충분히 그 경험치를 쌓아주는 좋은 책이라고 생각한다.

 

 

 

 

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

 

 

 


코딩테스트나 직무면접을 준비해야 하는 취준생에게도 좋은 책이며 특히 자료구조와 알고리즘을 모르는 AI 연구자와 데이터 분석가에게 매우 권하고 싶은 책입니다. 이 책은 짧은 시간에 파이썬을 기반으로 자료구조와 알고리즘을 읽힐 수 있게 구성된 책입니다. 86개의 코딩 테스트 빈출 문제가 있고 시간복잡도와 코딩스타일과 같은 기초 지식부터 예제 코드까지 모두 제공되는 책이기에 취업을 준비할 시간이 부족한 취준생에게 매우 적합한 책이라고 생각합니다.

또한 이 책은 AI 연구자와 데이터 분석가에게도 필요한 책입니다. 인공지능과 빅데이터 분야의 특성상 함께 하는 연구자들이 수학 또는 통계 전공을 한 경우가 많이 있습니다. 이 인원들은 아무래도 컴퓨터공학 지식이 적다보니 실험을 위해 구현할 때 상당한 난항을 겪습니다. 특히 실험할 때 이론은 참 좋은데 비효율적인 코드가 발생해서 그 결과가 나쁘게 나타나는 상황도 종종 발생하는데 이를 근본적으로 해결할 수 있는 방법은 자료구조와 알고리즘 책을 보는 것 뿐입니다. 업무에 주로 사용하는 파이썬으로 빠르게 자료구조와 알고리즘을 익히기 좋은 책입니다.

학부 시절을 되돌이켜보면, 전선과 전필을 선택하는 것이 수강 신청을 할 때 항상 중요한 이슈이긴 했습니다. 

그때, 알고리즘은 전선이었고, 자료구조는 전필이었던 것이 기억납니다. 

 

당시에 보면, 자료구조와 알고리즘의 차이를 아는 것이 중요했었는데, 왜냐하면, 자료구조 수업에도 알고리즘의 기본은 들어가 있었기 때문이었습니다. 

 

즉, 알고리즘의 수업 범위가 자료구조랑 겹치는 부분이 많았음에도 불구하고, 두 과목을 구분해서, 전선과 전필로 구분한 까닭이 무엇인지 말이죠. 

 

뭐, 그래도, 당시 분위기가, 컴공 전공으로 밥벌이를 할 거면, 최소한 자료구조-알고리즘 수업은 다 들어야 한다는 것이 암묵적 룰이었기에, 다 듣기는 했지만, 요즘 보면, 관련 책들이 정확하게 "자료구조"와 "알고리즘"을 구분하고 있는 책은 없는 것 같다는 생각입니다. 

각설하고, 본 책은 "알고리즘"이라는 단어를 제목으로 갖고 있는데, 그 실제 책 내용을 보면 다음과 같습니다. 

 

1. 파이썬 문법

2. 기본 자료구조와 알고리즘

3. 알고리즘별 문제풀이 1

4. 알고리즘별 문제풀이 2

 

이렇게 4파트로 이루어져 있었는데, 일단 1번 파트는 별 의미가 없었습니다. 

분량 자체가 너무 적은데다, 파이썬이 아무리 쉬운 언어라고 해도, 40페이지도 안되는 분량으로 언어를 정리할 정도는 아니니까 말이죠. 

그냥, 형식적인 파트였습니다. (차라리 없는 편이 낫지 않을까 싶을 정도였네요)

 

두번째 파트가 130여 페이지 분량의 내용으로, 기본적인 자료구조와 정렬/검색의 알고리즘을 소개한 부분입니다. 

사실, 파이선으로, 스택/큐/리스트/트리 등을 구현하는 것이 무슨 의미가 있긴 싶었습니다. (이미, 라이브러리화 되어 있는 자료구조니까요. 이걸 만드는 것은 Collection 라이브러리를 제공하지 않는 C 정도에서나 의미있는 구현이지 않을까 싶긴 했습니다. )

 

세번째 파트부터가 이 책의 핵심부분이었습니다. 

 

간단한 문제와 그 문제를 해결하기 위한 알고리즘.. 이랄까요?

어찌보면, 코딩 테스트용 문제 은행 모음의 느낌이긴 했습니다. 

 

<86개의 알고리즘 문제 은행>이라고 한다면, 볼만한 책이었습니다. 

코딩 테스트 용이라고 생각하면 적당한 책이었습니다. 

 

파이썬을 이것으로 공부하려는 생각 보다는, 최소한 기본 자료구조 수업까지는 들은 사람이, 취업 준비용으로 코딩 테스트를 준비할 때 볼 만한 책이지, 이것을 가지고 하나 하나 이론부터 공부할 생각을 한다면, 책을 잘못 고른것이지 아닐까 싶었습니다. 

그리고 책이.. 종이질도 좋고, 편집도 컬러로 만들어져있는데, 그렇게까지 하기에는 좀 너무 과한 것이 아닐까 싶은 생각이 들기도 했습니다. 

내용 치고, 그 책의 종이와 인쇄 상태가 너무 과하지 않았나 싶었는데, 그럼에도 불구하고 커버 자체는 그냥 책날개만 있는 두꺼운 종이 수준이라서.. 뭔가 여러가지로 언밸런스한 느낌이 있는 책이긴 했습니다. 

 

1,2부는 없애고, 3,4부에 조금더 신경써서, 100문제를 맞춘 뒤, "코딩 테스트 준비용 100문제" 뭐 이런식으로 만들었으면 어땠을까 하는 생각이 드는 책이었습니다. 

 

-----

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

-----

아마 이 책까지 찾았다면 코딩테스트를 준비하건, 알고리즘 공부를 하건 고민을 많이 했을 것 같다. 그도 그럴것이, 시중에는 정말로 다양한 알고리즘 책이나 강의자료들이 정말 많다. 소위 IT업계의 상위권이라고 할수 있는 네카라쿠배에 가기 위해서라도 관련 내용은 알고 있어야 되고, 무엇보다 어떤 소프트웨어가 동작하는 것을 이해하기 위해서는 알고리즘에 대한 이해가 필요하다. 다만 최근의 경향은 뭔가 이해한다 라기 보다는 그냥 경향에 대해서 약간 주입식의 형태로 암기하는 식으로 이뤄지고 있는 것 같아서 조금 아쉽긴 하다. (나도 뭔가 고민해야 될 문제가 있으면 혼자서 고민해보기 보다는 그냥 외워서 하는 태도도 있어서 반성한다...)

 어쨌든 다양한 코딩 관련 서적들이 있고, 다양한 부류로 나눠서 볼 수 있다. 아무래도 공부하는 언어에 따라서 책을 구분할 수 있겠고, 아니면 leetcode 나 정보올림피아드 기출 풀이와 해설을 다룬 책들이 있을 수 있고, 혹은 아예 효율적으로 이론적인 내용만 담으면서 저렴한(?) 책들도 있다. 물론 어떤 책이 가장 좋고, 나쁘다의 기준은 책마다 추구하는 과점이 다 다르기에 그걸 표현할수는 없을 것 같고, 개인적으로는 딱 책의 전체적인 난도가 일관적이면서 설명이나 도식화가 잘되어 있는 책이 보기에 조금더 좋은 책이라고 생각한다. 이런 관점에서 한번 책을 소개해보고자 한다.

알고리즘 인사이드 with 파이썬

이 책은 앞에서 소개한 것처럼 수많은 알고리즘 관련 책 중에서 파이썬을 타겟팅하면서 leetcode에 나온 문제 중 저자가 중요하다고 생각한 문제 86개에 대한 해설을 담고 있다. 물론 막연하게 기출 문제를 담고 해설하지 않고, 문제의 큰 주제에 따라 분류하고, 해당 주제를 이해하는데 필요한 기본적인 자료구조나 해결 전략을 앞부분에서 소개하고 있다. 

이 책의 장점이라고 할 수 있는 것은 문제별로 포함되어 있는 해결 전략과 이를 뒷바침할 수 있는 도식들이다. 사실 어떻게 보면 하나의 해결과정을 설명하다보면 중복되는 내용도 많이 있고, 이를 설명하기 위한 도식도 조금 늘어져 보일 수 있다. 이 책은 그래도 이해에 필요한 도식들을 모두 설명함으로써 적어도 그림으로 문제의 의도를 설명하고자 했다. 물론 이때문에 책의 분량이 조금 많아진 경향도 있지만, 이런 문제 풀이에 익숙하지 않은 첫 접근자라면 그림을 통해서 이렇게도 해결할 수 있겠구나 하는 생각이 들었다. 

책을 읽는 조금 불편한 부분도 있긴 했다. 일반적인 개발서에 익숙해져서 그런건지는 모르겠지만, 해결코드와 설명을 같이 놓고 보기가 조금 힘들었다. 물론 설명 부분에서 해결 코드의 라인번호와 같이 자세히 설명은 되어 있으나, 적어도 해결코드에도 간단한 주석정도 달아주었으면 조금 더 이해에 도움이 되지 않았을까 싶은 생각이 들었다. 그리고 책의 구성 방식이 기본적인 자료구조와 알고리즘을 쭉 설명하고, 뒷부분에서 이와 관련된 leetcode 기출을 해설하는 방식으로 되어 있는데, 차라리 그 큰 주제에서 알고리즘을 설명했으면 조금더 책 읽는데 편하지 않았을 것 같았다. (뒤에서 트리 관련 기출을 보다가 기본 알고리즘 부분으로 돌아가서 계속 왔다갔다 읽는게 조금 번거롭긴 했다...)

어떻게 보면 위의 평은 개인적인 주관이자 여러 코딩테스트 준비책을 읽고 비교되는 부분에 대해서 기술을 했다. 그래도 적어도 이 책이 추구하는 것처럼 다양한 leetcode 기출을 통해서 대부분의 기본 알고리즘을 다루고자 했고, 또한 충분한 도식과 설명을 통해서 초중급자들이 접근하기에는 좋은 책임이 틀림없다. 

	(해당 포스트에서 소개하고 있는 "알고리즘 인사이드 with 파이썬" 책은 한빛 미디어로부터 제공받았음을 알려드립니다.)


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


 

알고리즘 인사이드 with 파이썬

 

 

이번에 리뷰할 도서는 "알고리즘 인사이드 with 파이썬" 입니다.

 

이 도서는 자료구조나 알고리즘에 대한 내용뿐만 아니라 코딩 테스트에 나오는 문제와 파이썬 기본 문법에 대한 내용도 포함되어 있어

어려움 없이 자료구조와 알고리즘에 대한 내용을 파이썬을 통해 접할 수 있도록 구성되어있습니다.

 

이 도서를 읽으면서 느낀 장점이자 특징으로는

 

1. 그림이 잘 표현되어 있으며, 예제 코드를 통한 실습이 가능하다.

자료구조나 알고리즘은 가깝게 와닿는 부분이 아니다보니 코드나 그림과 같은 학습 자료가 필수라고 봅니다.

예전에 자료구조를 C++로 배울 때 그림말고는 자료가 없어서 배울때 고생한 기억이 났는데, 이 도서는 코드와 그림이 잘 제공되어 있어서 상당히 도움이 많이 되었습니다.

그림 자료는 아래와 같이 디테일한 부분까지도 잘 표현이 되어 있어서 이론적인 이해해 상당한 도움이 되었으며, 코드 자료를 통해 구현을 해보면서 실습도 할 수 있었습니다.

 

 

그림 예시

 

 

 

코드 예시

 

 

2. 자료구조와 알고리즘에 대한 내용이 다양하게 구성되어 있다.

스택, 큐, 트리, 힙, 그래프, 정렬 등 간단한 알고리즘과 자료구조부터 재귀, 탐색, 공간, 순열, 배열, 동적 계획법 등 다양한 알고리즘에 대한 이론적 내용과 문제, 풀이 방법에 대한 내용이 구성되어 있습니다.

예전에 읽었던 책들은 간단한 주제에 대해 다양하게 풀어서 쓰여있던 것으로 기억하는데, 이 도서의 경우 숲과 나무가 전체적으로 다양한 도서라고 생각됩니다.

 

3. 예제 문제가 함께 제공된다.

이론 내용만으로 끝나면 이해가 50% 정도로 끝날 수 있는데, 예제 문제들을 다양하게 제공함으로써 이해한 내용을 기반으로 한번 더 이해하고 적용하는데 큰 역할을 합니다.

또한 이 부분은 추후 코딩 테스트에서 자주 나오는 부분인 자료구조, 알고리즘 부분을 대비하는데 있어서 큰 도움이 될 것 같습니다.

 

총평으로는 파이썬에 대한 기초적인 내용을 포함하면서 자료구조와 알고리즘에 대한 깊고 다양한 내용, 실습 코드 및 그림 자료, 예제 문제가 함께 구성되므로 처음 파이썬을 접하는 분들도 큰 어려움 없이 읽을 수 있는 도서라고 생각됩니다.

코딩 테스트를 앞두고 있으신 분이나, 자료구조나 알고리즘에 대해 공부를 해야하시는 분이라면 읽어보시는걸 추천합니다.

책은 파이썬 기본문법의 핵심을 먼저 다룬 뒤, 기본 자료구조와 알고리즘을 복습하고, 각 알고리즘별 문제를 풀어보는 구성이다. 

알고리즘 문제 파트는 2개로 되어 있는데 첫번째 파트가 재귀, 탐색 등 좀 더 자주 나오는 분야로 구성되어 있고 두번째 파트가 트리나 동적계획법 등 좀 덜 나오는 분야로 되어 있다.

관련한 리트코드도 기재되어 있어 참고할 수 있다. 

 

chapter 1 : 파이썬 기본 문법

-데이터 타입 : numeric(int, float, complex), sequence(list, tuple, range), set, map(dict), text(str), misc(bool, bytes, none)

각 데이터 타입으로 할 수 있는 특정 작업이 있으니 점검해보는 것도 나쁘지 않겠다. 

 

숫자형 : 0b를 붙이면 2진수 가능. 0b10. 2진수로 계산할 때 편리한 경우가 있다. 

숫자 앞에 0o를 붙이면 8진수(0~7) ex. 0o15 => 5 + 1*8 = 13

숫자 앞에 0x를 붙이면 16진수. 0xF => F는 16진수에서 15를 의미한다. 

 

 

 

 

메서드 : 클래스에 속한 함수

함수 : 클래스와 상관없이 독립적으로 존재

 

10진수를 2진수의 문자열로 변경 {:b}

 

set은 배타적 논리합을 ^로 찾을 수 있음 예) a ^ b

 

이 밖에도 기본 파이썬 문법에 대해 핵심(데코레이터, 코루틴, 클래스, 상속, 멀티프로세싱)만 잘 짚어주기 때문에 코드를 구성하는 방법을 짚기에 좋다.

이후 정규식도 짚고 넘어가니 확인해보면 좋겠다.

 

chapter 2 : 기본 자료구조와 알고리즘

알고리즘-스택, 큐, 트리, 해시, 그래프, 검색, 정렬, 우선순위 큐, Radix 트리

기본 자료구조

스택 : 후입선출. ctrl z와 같다는 좋은 비유. 구현도 간단. 리스트로 충분히 스택 가능

큐: 선입선출

냅다 자료구조를 배울 때는 구현 코드를 왜 알아야 되는지 귀찮아했던 적이 있다. 

그런데 자료의 구조가 어떻게 되는지, 그리고 그 구조에 따라서 어떻게 해당 구조를 이용해야 되는지를 알아야 되더라.

큐의 경우 예를 들자면 원형 큐의 경우 3의 길이라면 버퍼의 크기는 4로 설정해야 한다. 3번째 원소를 저장하고 front와 rear가 같은 곳을 가리키면 큐가 빈 것을 의미하는 것과 같기 때문이다(큐가 비지 않았고 is full상태이므로).

따라서 이 경우 원형큐가 가득 찼는지 알려주는 is_full 함수가 필요하다. 

 

연결리스트 : 원형 큐처럼 고정 크기가 아닐 때 사용

-단일 연결 리스트 : 노드는 next 링크 하나

-이중 연결 리스트 : next와 앞쪽 노드를 가리키는 pre 링크 2개. 순차적으로 값을 검색. 대규모 데이터엔 적합 x. 가변 크기 큐에 적합.

 

트리

-트라이 : prefix tree. 자식 노드의 개수에 제한이 없고 키값의 대소 관계를 파악하여 값을 찾는 것이 목적이 아님. 

               문자 혹은 문자열을 저장하고 빠르게 검색하는 용도. 

 

자료구조를 읽으면 알겠지만 실무에서 이 알고리즘이 어떻게 사용되는지 설명하는 부분이 유익했다. 보통은 이런 알고리즘을 실제와 동떨어진다고 생각하는 경향이 있으므로..

 

기본 알고리즘

: 이 파트도 정렬(각 정렬 유형), 그래프 등의 알고리즘을 구현하는 코드를 제시하게 각 코드를 어떤 식으로 구현해야 하는지 설명한다. 앞서 자료구조에서도 그런 식으로 설명을 해주며, 실제로 어떤 문제를 풀 때 사용되는지도 알 수 있다.

 

 

기존에 알고리즘 기초 문제를 어느 정도 숙지한 사람이라면 이 책을 통해 파이썬 기본 문법 지식도 다시 한번 복습하면서 저자가 엄선한 문제를 어떤 문제의식을 갖고 풀어야 되는지 확인할 수 있겠다.

 

 

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

IMG_6758.JPG

 

 

네카라쿠배 같은 IT로 유명한 기업들이 채용할 때 진행하는 것이 바로 코딩테스트 입니다. 여러분이 만약 코딩테스트를 통과하기 위해 파이썬을 선택했다면 한빛미디어에서 나온 “알고리즘인사이드 with 파이썬”을 강력 추천드립니다.

저자는 실무에 유용한 86개 문제를 엄선하여 실전 밀착 학습을 할 수 있게 해줍니다. 만약 파이썬이나 알고리즘에 대해 잘 모르는 초보자의 경우 파트1과 파트2를 통해 기본 문법과 핵심 자료구조, 기본 알고리즘에 대해 꼼꼼한 설명을 해주기 때문에 자신이 초보자여도 충분히 이 책을 읽어 나가실 수 있습니다.

파트3, 4를 통해 본격적인 알고리즘별 문제 풀이를 진행합니다. 코딩테스트에서 어떤 문제를 만날지 모르지만 여러가지 문제 유형을 이 책을 통해 익혀둔다면 분명 어렵지 않게 문제를 해결할 수 있을 것입니다. 문제를 해결해 나가는 과정을 이해하기 쉬운 구조로 해둔 것이 책의 특징이라 할 수 있습니다. 문제의 난이도나 키워드 힌트에 대한 정보도 제공하는 세심함이 있습니다. 제가 또 책을 읽으면서 좋았던 점은 시간 복잡도를 분석하는 성능 분석에 대한 내용이 있다는 것입니다. 단순히 문제를 푸는 것에 그치지 않고 성능에 대한 고민도 할 수 있게 해주어 현직 개발자들에게도 많은 도움이 될 것이라 생각합니다.

 

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

코딩 테스트를 준비하는 분들이 빠르게 기본을 잡을 수 있는 도서입니다.

책의 초반부에는 알고리즘 구현에 필요한 만큼의 파이썬 문법을 간단하게 설명하고, 자료구조를 직접 구현해 보면서 알고리즘 문제를 풀 수 있는 기본기를 다질 수 있습니다.

그 이후에는 알고리즘 문제 유형별로 풀어보면서 빠르게 감을 익힐 수 있도록 실용적으로 구성되어 있습니다.

 

알고리즘 테스트는 유형별로 다양한 문제를 풀어보는게 중요하다고 생각합니다.

이 책으로 기본 유형들을 학습하고 리트코드나 백준등 알고리즘 문제 풀이 사이트에서 매일 꾸준하게 중~상 난이도의 문제를 풀어본다면, 금방 코딩 테스트가 두렵지 않을 실력이 될 것이라 생각합니다.

 

코딩 테스트를 준비하시는 분들 뿐만 아니라 알고리즘 문제를 다시 풀어보고 싶은 개발자 분들에게도 강력하게 추천합니다.

 

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

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

이 책은 완전 초심자를 위한 책은 아닌 것 같고 알고리즘 테스트를 준비하거나 알고리즘에 대해 학습을 하고자 하는 사람에게 좋은 자습서이다. 

자습서 물론 내용은 자료구조 및 알고리즘의 개념 등이 방대하게 들어있어 이미 내용은 알차다. 다만 살짝 아쉬운 점은 

키워드에 대한 조금의 팁이 추가되었으면 하는 바램이다. 물론 자습서가 전공서적 레벨의 내용을 담기란 어려운 일이다. 

또한 알고리즘을 안다는 것 자체가 어느정도 선수 지식이 있다는 것 이겠지만 완성된 음식에 조미료가 첨가되면 천상의 맛을 내듯 

현재 점수가 98점 이라면 간략한 팁에 대한 설명이 추가 되었다면 100점이 될 책인 것 같다.

[도서리뷰] 알고리즘 인사이드 with 파이썬

 

알고리즘 인사이드 with 파이썬

알고리즘(Algorithm) 이라고 하면 우선 겁이 나고 어렵다는 생각이 듭니다. 하지만 이 책은 그런 부분을 자세한 설명와 예시를 통해 스스로 학습하고 훈련할 수 있도록 구성되어 있습니다. 먼저, 알고리즘에 기본이 되는 문법에 대해 설명을 해주고,이후 심화 알고리즘과 문제 풀이 등이 담겨 있습니다. 총 86개의 알고리즘 문제를 제공해 주고 있습니다. 이 책의 목적은 보다 많은 개발자가 빠르고 안정적으로 효율적인 알고리즘을 개발할 수 있는 역량을 갖추도록 돕는 것입니다.

 

이 책의 구성은 LESSON 부분(파트 1, 2)과 PRACTICE 부분(파트 3, 4)으로 나눠져 있고, 파트1은 파이썬 문법, 핵심만 뽑기, 파트 2는 기본 자료구조와 알고리즘, 파트 3은 알고리즘별 문제 풀이 I, 파트 4은 알고리즘별 문제풀이 II, 부록으로 구성되어 있습니다.

 

PART 01 파이썬 문법, 핵심만 뽑아보기

파이썬은 데이터 처리와 기계학습부터 웹 서버 개발에 이르기까지 다양한 분야에서 널리 사용되는 개발 언어입니다. 특히 파이썬은 간결한 문법과 강력한 내장 자료구조는 알고리즘을 구현할 때 진가를 발휘합니다. 이 책에서 다루는 모든 알고리즘 문제는 파이썬으로 구현했습니다. 따라서 본격적으로 들어가기 앞서 자료구조와 알고리즘을 이해하는 데 필요한 파이썬 핵심 문법과 정규표현식을 알아봅니다.

 

Chapter 1 파이썬 기본 문법

 

파이썬은 간결한 작성 방법과 폭넓은 활용 법위로 가장 사랑받는 개발 언어입니다. 알고리즘을 살펴보기 앞서 파이썬에서 꼭 알아 두어야 할 핵심 문법을 살펴보겠습니다. 그중에서도 이번 챕터에서는 기본 문법은 데이터 타입, 반복문 클래스 그리고 멀티 프로세싱에 대해 살펴봅니다.

 

기본 타입이란? 언어에서 기본으로 제공하는 데이터 타입을 말하며, 사용자가 정의할 필요 없이 바로 사용할 수 있습니다. 대표적으로 숫자형, 문자열 등이 기본 타입에 해당합니다.

숫자형 : 숫자형 데이터 타입은 말 그래도 정수와 실수를 가리키며, 연산이 가능합니다.

문자열 : 파이썬은 문자열과 문자를 구분하지 않습니다. 따라서 큰 따옴표(“)나 작은 따옴표(‘) 중 무엇을 사용해도 문자열을 할당할 수 있습니다.

 

빌트인 타입

빌트인 타입이란? 리스트, 튜플, 딕셔너리, 집합 등 파이썬에서 기본으로 제공하는 자료구조를 뜻합니다. 알고리즘 구현에 많이 활용하는 타입이므로 반드시 알아 두는 것이 좋습니다.

 

리스트 : 리스트는 여러 원소를 담은 데이터 타입으로, 변수에 [ ] 또는 list를 대입해 선언할 수 있습니다.

튜플 : 튜플은 리스트와 마찬가지로 여러 값을 하나로 묶는 데이터 타입으로, 선언하는 방법은 2가지 있습니다. 괄호 사이에 1개 이상의 원소를 지정하거나 괄호 없이 값만 입력한 다음 마지막에 콤마(,)를 입력하면 됩니다.

딕셔너리 : 파이썬은 맵 타입의 자료구조로 딕셔너리를 제공합니다. 딕셔너리는 키와 값을 하나의 쌍으로 저장하는 자료 구조로, { } 또는 dict를 사용해 선언할 수 있습니다.

집합 : 집합은 중복을 허용하지 않은 원소 모음을 표현하는 자료구조입니다. 따라서 집합을 선언할 때 중복된 값은 모두 제거하고 저장하는 것을 확인할 수 있습니다. 집합은 { }에 원소를 넣어 선언합니다.

 

조건문과 반복문

if 문 : 파이썬에서 조건문 if문은 타 언어와 달리 if문 뒤에 괄호를 열지 않고 표현식을 작성해도 코드가 작동합니다. 단, 표현식의 마지막에는 반드시 콜론(;)이 있어야 합니다.

for 문 : for 문은 실행문을 반복하는 반복문으로, range 안에 반복의 시작과 끝 그리고 증감하는 값을 지정해서 실행합니다.

while 문 : for 문 대신 반복문을 구현하는 또 다른 방법은 while 문을 사용하는 것입니다. while 문은 for 문보다 표현식이 복잡할 때 사용합니다.

 

함수와 람다 표현식

함수 : 파이썬에서 함수를 선언하는 방법은 간단합니다. def로 함수를 정의합니다.

람다 : 파이썬은 익명 함수인 람다 표현식도 지원합니다. 람다 표현식은 func 라는 변수에 할당해 일반 함수처럼 사용할 수 있습니다.

 

고급 제어

반복자 : 클래스를 반복 가능한 객체로 만들어 반복자로 사용할 수 있습니다. 방법은 간단합니다. 클래스를 정의할 때 __iter__와 __next__ 메서드를 구현하면 됩니다.

제너레이터 : 제너레이터는 yield 키워드를 사용해 호출자에 값을 전달하는 객체로, get_line 함수에서 lines에 있는 값을 하나씩 읽어 들여 호출자로 전달하는 기능을 수행합니다.

데커레이터 : 디자인 패턴에서 기능을 덧붙이는 것을 가르키는 용어로 함수에 기능을 추가할 수 있습니다. 타 언에서는 클래스를 정의하고 상속하는 과정이 필요하지만, 파이썬은 간단히 @로 기능을 추가할 수 있습니다.

코루틴 : 코루틴은 문법적으로 제너레이터와 다르지 않습니다. 차이점이 있다면 2개 이상의 제너레이터가 서로 값을 주고 받으면서 교차 실행된다는 점입니다. 즉 ‘코루틴’이라는 이름처럼 2개 이상의 루틴이 함께 실행된다는 뜻입니다.

 

클래스

객체 지향 프로그래밍에서 지원하는 클래스를 파이썬에서도 지원합니다. 클래스는 서로 응집되어 하나의 역할을 수행하는 데 필요한 모든 메서드와 속성을 은닉시켜 추상화된 데이터 타입등을 활용 할 수 있습니다.

 

정적 메서드 : 정적 메서드는 클래스 인스턴스를 생성하지 않고 바로 사용할 수 있는 메서드로, 멤버 속성 등에 접근할 수 없는 순수 함수로 사용합니다.

상속 : 객체 지향의 핵심 개념 중 하나가 상속입니다. 부모가 되는 클래스의 속성과 기능을 기반으로 새로운 클래스를 정의하는 기법입니다.

 

멀티 프로세싱

파이썬에서 멀티스레딩은 오직 하나의 코어만 사용합니다. 즉, 여러 코어를 사용해 스레드를 병렬로 동작하지 않습니다. 오직 병행 처리만 가능합니다. 이러한 제약이 발생하는 원인은 GIL에 있습니다.

 

Chapter 2 정규표현식

 

현재는 파이썬, 자바, GO 등 많은 프로그래밍 언어가 다양한 문법을 제공하지만, 과거 최초의 컴퓨터인 튜링 머신이 탄생할 즈음 컴퓨터 언어는 수학 수식으로만 존재했습니다. 이때 사용했던 언어가 정규 언어입니다. 정규표현식은 바로 이 정규 언어에서 유래되었습니다. 정규표현식은 다양한 패턴을 통해 많은 것을 표현할 수 있고 반대로 패턴을 찾을 수 있다는 장점이 있습니다.

 

search, match

search 함수는 이름 그대로 원하는 패턴을 찾아 주는 함수입니다. search 함수의 첫 번째 인수에 찾고자 하는 문자 패턴을 입력하고, 두 번째 인수에 찾으려는 대상 문자열을 입력합니다. match 함수는 원하는 문자열을 찾는 코드입니다. 결과는 search 함수를 사용한 것과 동일하지만, match 함수는 찾고자 하는 문자열 패턴 앞에 다른 문자 혹은 공백이 붙어 있으면 이를 찾지 못합니다.

 

compile

특정 패턴을 반복해야 할 때는 re.compile로 정규표현식의 패턴을 컴파일된 객체로 사용하는 방법이 있습니다. 패턴 뒤에 + 혹은 *, ? 등을 붙이면 패턴이 몇 번 반복되어야 검색을 수행할 것인지에 대한 반복 조건을 지정할 수 있습니다.

 

findall과 finditer

하나 이상의 대상을 검색하고 싶다면 search나 match가 아닌 findall 혹은 finditer를 사용합니다.

PART 02 기본 자료구조와 알고리즘

알고리즘을 구현하기 위해서는 여러 가지 다양한 자료구조를 응용하여 문제 해결 과정에 적용해야 합니다. 또한 기본적으로 많이 사용하는 알고리즘을 미리 알고 있어야 풀 수 있는 문제가 그만큼 많아집니다. 기본적인 알고리즘은 스택, 큐, 트리, 해시, 그래프를 살펴보고 이어서 검색 및 정렬 그리고 마지막으로 우선순위 큐, Radix 트리 등에 대해 알아보겠습니다.

 

Chapter 3 핵심 자료구조

 

스택(Stack)

스택을 저장하는 자료구조는 여러 가지가 있지만 그중 가장 간단하고 흔히 쓰이는 자료구조가 스택입니다. 스택은 대표적인 후입선출(LIFO)로 가장 나중에 들어간 자료가 가장 먼저 출력되는 자료 구조입니다. 스택 자료구조는 push, pop, top, size, empty 등의 기능을 제공합니다.

 

큐(Queue)

큐는 손님이 들어온 순서대로 처리하는 것을 보장합니다. 즉, 먼저 들어온 손님을 먼저 맞이하고 나중에 들어온 손님은 들어온 소님의 업무 처리가 끝나야 차례가 됩니다. 이렇게 먼저 들어온 손님이 먼저 처리되는, 즉 큐에서 나가는 것을 보장하는 방식을 선입선출(FIFO)라고 합니다. 큐 자료구조는 enqueue, size, dequeue 등의 기능을 제공합니다.

 

원형 큐(Circular Queue)

큐는 구현방식에 따라 크게 2가지가 있습니다. 선입 선출을 보장하기 위해 선형 방식으로 큐를 운영하는 원형 큐, 순환 큐가 있고 원소의 개수에 따라 큐의 크기가 달라지는 가변 크기 규가 있습니다. 가변크기 큐는 보통 연결 리스트로 구현합니다.

 

연결 리스트(Linked List)

연결 리스트는 원소가 없으면 0, 원소를 추가하는 만큼 크기가 커지는 것이 특징입니다. 연결 리스트로 큐를 구현하면 연결 리스트의 크기를 자유롭게 변경할 수 있고, 버퍼도 원소가 없으면 0개, 원소가 n개 들어오면 n개로 관리합니다. 연결 리스트는 단일 연결 리스트와 이중 연결 리스트 2가지 종류가 있습니다.

 

해시(Hash), 맵(Map)

해시, 맵은 특정 값을 추가, 삭제, 검색하는 속도를 높이는 자료구조입니다. 해시는 해시 셋과 해시 맵으로 나뉩니다. 해시 셋은 이름 그대로 집합의 성격을 가지고 있어 중복을 허용하지 않고, 해시 맵으로 구현할 수 있습니다. 해시 테이블이라고 불리는 해시 맵은 추가, 삭제, 검색을 거의 O(1) 속도로 무척 빠르게 수행하는 자료구조입니다. 이는 배열과 리스트의 특징을 모두 갖고 있어 구현도 무척 쉽다는 특징이 있습니다.

 

트리(Tree)

트리는 하나의 뿌리에서 수많은 가지로 뻗어나가는 모양으로 한 곳에서 여러 형태로 파생되는 계층적 구조를 시각화하는데 사용됩니다. 트리 형태로 흔히 표현하는 것 중에 하나가 가족 관계를 나타내는 가계도입니다. 대표적 트리로 이진트리가 있습니다.

 

트라이(Trie)

트리의 한 종류로 prefix tree라고 합니다. 앞서 살펴본 이진 트리와 달리 자식 노드의 개수에 제한이 없고 키값의 대소 관계를 파악하여 값을 찾는 것이 목적이 아니므로 노드를 추가할 때 키값의 크기에 따라 노드의 위치를 고려할 필요가 없습니다. 트라이는 보통 문자 혹은 문자열을 저장하고 이를 빠르게 검색하는 용도로 사용합니다.

 

힙(Heap)

큐는 선입선출방식으로 데이터를 처리하는 대표적 자료구조입니다. 우선순위 큐는 최솟값을 기준으로 큐에서 값을 내보내는 자료구조로, 내부에서 연결 리스트를 사용하거나 트리를 이용해 구현할 수 있습니다. 그러나 연결 리스트로 구현하면 자료구조의 특성 때문에 성능이 그리 좋지 않습니다. 가장 성능 좋은 우선순위 큐를 구현할 때는 힙이라는 자료구조를 사용합니다. 힙은 루트 노드가 항상 가장 작은 값임을 보장하는 자료구조이기 때문에 힙으로 우선순위 큐를 구현하면 가장 작은 값의 검색을 O(1)의 시간 복잡도로 수행할 수 있습니다. 그렇기에 힙 자료구조를 사용하여 구현한 우선순위 큐가 최솟값을 획득할 때 가장 성능이 좋습니다.

 

그래프(Graph)

관계성을 시각적으로 쉽게 표현하는 방법이 그래프입니다. 그래프는 정점과 간선으로 구성됩니다. 정점은 그래프의 구성 요소를 의미합니다. 간선은 정점과 정점의 관계, 즉 ‘관련이 있음’을 표현합니다. 여러 개의 정점과 간선이 모여 그래프를 형성합니다. 그래프는 정점 간 방향성이 있느냐 없느냐에 따라 유향 그래프와 무향 그래프로 나눌 수 있습니다. 방향과 상관없이 간선에 가중치를 두는 가중치 그래프도 있습니다. 가중치 그래프란, 어떤 한 정점에서 연결된 다른 정점으로 이동할 때 얼마만큼의 비용이 소모되는지를 표시한 그래프입니다. 최단 거리, 공정 문제 등 다양한 분야에서 간선의 가중치를 활용하여 문제를 해결할 수 있습니다.

 

 

Chapter 4 기본 알고리즘

 

정렬

정렬은 특정 기준에 맞춰 값을 나열하는 과정입니다. 가장 흔히 볼 수 있는 예로는 오름차순/내림차순 정렬이 있습니다. 이외에도 값이 생성된 시간이나 출현하는 순서에 따라 나열하는 등 다양한 정렬이 있습니다. 정렬 방식에 따라 성능이 달라지기도 합니다. 가장 성능이 좋은 정렬은 사실 퀵 정렬이며, 퀵 정렬은 분할 방식을 사용해 실제 실행 시간의 성능을 높일 수 있기 때문입니다.

 

구현이 단순한 정렬 : 버블 정렬, 선택 정렬, 삽입 절열, 셀 정렬

구현이 복잡한 정렬 : 힙 정렬, 병합 정렬, 퀵 정렬, 기수 정렬

 

그래프 알고리즘

그래프에서 살펴본 인접 행렬, 인접 리스트, 셋 등으로 그래프의 구성 요소와 구현 형태 등을 살펴봤다면, 이번에는 기본적인 탐색 알고리즘인 깊이 우선 탐색, 너비 우선 탐색을 시작으로 최단 경로 구하기, 모든 노드를 최소 비용으로 연결하기, 순서를 보장하는 위상 정렬 등을 살펴봅니다.

 

문자열 검색

문자열 검색이란 말 그대로 문자열로 주어진 문자 배열에서 원하는 패턴의 배열을 찾는 것입니다. 문자열을 검색하는 가장 흔한 방법은, 문자열의 길이가 M이고 찾고자 하는 부분 문자열의 길이가 N 이라고 할 때 O(MN)의 시간 복잡도를 찾는 것입니다. 그러나 KMP 알고리즘 그리고 라빈-카프 알고리즘 등은 문자열 검색을 O(N)의 시간 복잡도로 수행할 수 있습니다.

PART 03 알고리즘별 문제 풀이 I

개발자라면 반드시 알아야 하고 문제 해결 능력을 증진시키는 데 도움이 되는 핵심 알고리즘(재귀, 탐색, 공간, 순열과 조합, 배열, 정렬, 검색, 문자열)을 다룹니다.

 

Chapter 5 재귀

 

재귀 알고리즘은 큰 문제를 작게 쪼개 해결하는 방법 중 하나로, 자기 자신(함수)를 호출한다는 특징 때문에 재귀라고 불립니다. 재귀가 핵심 알고리즘으로 손꼽히는 이유는 강력한 범용성 때문입니다. 탐색 알고리즘에서도 재귀가 쓰입니다. 재귀 알고리즘 개념은 간단하지만 명확한 이해 없이 제대로 구현하는 것이 그리 쉽지 않습니다.

 

Chapter 6 탐색

 

넓은 2차원 행렬에서 최단 거리를 찾거나 장애물을 피하면서 유일한 출구를 찾을 때는 행렬의 크기, 장애물의 위치, 출구의 위치 등이 테스트 케이스마다 다르게 입력되기 때문에 경우의 수가 무척 많습니다. 이렇게 일일이 코딩하는 것이 무척 비효율적일 때는 발생 가능한 모든 경로를 수행하면서, 즉 탐색하면서 문제를 해결할 수 있는지 없는지를 판단해야 합니다.

탐색 문제 해결 방법은 2가지가 있습니다. 첫 번째는 재귀 방식으로 방문 가능한 모두 방문하는 것이고, 두 번째는 큐 혹은 스택 자료구조를 사용해 모든 경로를 탐색하는 것입니다.

 

Chapter 7 공간

 

알고리즘 문제 중에는 기하하적인 특징을 파악해서 풀어야 하는 문제들이 있습니다. 불규칙하게 분포되어 있는 항목들을 균등하게 분포하는 방법을 찾는 문제라든가, 위치별로 서로 다른 특성을 가지고 있는지를 찾아내야 하는 문제, 공간에 배치된 숫자들을 순회 규칙에 따라서 방문해야 하는 문제 등 공간이 특징을 파악해야 해결이 가능한 문제들이 있습니다.

 

Chapter 8 순열과 조합

 

확률과 통계에서 가장 먼저 짚고 넘어가야 하는 것은 확률과 통계의 정의입니다. 통계란, 조사하고자 하는 전체 집단(모집단)의 일부(표본)를 획득해 평균, 분산 등 다양한 수치를 산출하는 것을 뜻하고, 확률이란 경우의 수 중 특정 사건이 발생할 가능성을 뜻합니다. 특히 확률에서는 경우의 수를 아는 것이 무척 중요한데요. 이때 발생 가능한 경우의 수를 모은 집합을 표본 공간이라 합니다. 이런 발생 가능한 모든 경우의 수를 찾는 문제 혹은 모든 조합을 찾는 알고리즘 문제들은 가장 자주 접하는 문제 유형 중 하나로, 이번 장에서는 이와 관련된 몇 가지 문제들을 살펴봅니다.

 

Chapter 9 배열

 

특정 구간에 겹치지 않는 시간을 찾거나 여러 거래 내역에서 유효하지 않는 거래를 찾는 등 문제 상황에 배열이 주어지는 유형의 알고리즘을 살펴봅니다. 배열 유형이지만 해결에 다양한 알고리즘을 사용할 수 있습니다. 단, 배열 유형은 일관된 패턴이 존재하지 않기 때문에 이론부터 학습하는 것보다 문제를 직접 살펴보면서 빠르게 해결 방법을 알아보겠습니다.

 

Chapter 10 정렬

 

대부분 정렬 문제의 목적은 주어진 값을 오름차순 혹은 내림차순으로 배치하는 것입니다. 단순히 주어진 숫자들을 오름차순 혹은 내림차순으로 정렬하는 문제만 존재한다면 우리가 흔히 알고 있는 퀵 정렬, 머지 정렬과 같은 알고리즘만 파악하고 있으면 됩니다. 그러나 문자열의 출현 빈도에 따른 정렬이라든지, 행렬 내 대각선 방향으로 원소들을 정렬해야 하는 등 정렬을 하는 다양한 규칙이 주어지고 이 규칙을 만족하는 알고리즘을 찾아야 하는 문제들이 있습니다.

 

Chapter 11 검색

 

검색은 복잡한 알고리즘을 풀어나갈 때 필요한 가장 기본적인 알고리즘으로, 입력으로 주어진 배열에서 특정 값을 찾는 문제에 흔히 쓰입니다. 또, 검색 알고리즘은 다른 복자한 알고리즘을 해결하는 데 부품처럼 사용되기도 하므로 같은 검색 기능을 제공해도 보다 빠르게 검색할 수 있는 효율적인 알고리즘을 구현하는 것이 중요합니다.

 

Chapter 12 문자열

 

문자열 분리, 분석, 문자 변환 및 검사 등을 다루면서 문자열에 관한 문제 유형을 살펴보겠습니다. 앞뒤로 똑같이 읽히는 팰린드롬, 문자를 재배치하여 다른 단어를 만들어내는 애너그램, 문자열을 빠르게 찾기 위한 롤링해서 윈도우 등 문자열과 관련된 문제들은 특성에 맞는 적합한 방법을 찾아서 해결해야 합니다.

 

PART 04 알고리즘별 문제 풀이 II

이론과 실전을 한번에 손에 익히기 위한 이론과 문제 풀이를 다루며, 이전에 학습한 트리, 그래프, 기본 자료구조에서 좀 더 심화된 개념을 살펴보고 다양한 문제를 풀어봅니다.

 

Chapter 13 기본 자료구조 활용

 

스택, 리스트 등 여러 자료구조를 활용해 풀 수 있는 문제들을 살펴봅니다. 경로가 가장 긴 파일명을 찾으면서 스택을 활용하고 입력된 여러 정수를 특정한 크기로 분할하며 리스트를 다루는 것은 물론 헬퍼 함수와 제한된 시간 안에 성능을 비약적으로 높이는 방안까지 살펴보겠습니다. 문제 풀이 과정을 통해 자료 구조를 잘 사용하는 것이 얼마나 중요한지 알 수 있습니다.

 

Chapter 14 트리

 

기본적인 순회부터 트리의 깊이와 모든 경로 파악하기 등 트리 알고리즘에서 학습했던 내용을 응용해서 풀 수 있는 몇 가지 문제를 살펴봅니다.

 

Chapter 15 그래프

 

가장 연결이 많은 정점 찾기, 최소 비용으로 모든 정점 순회화기, 사이클 여부 확인하기 등 그래프 알고리즘을 응용해서 해결할 수 있는 문제들에 대해 살펴봅니다.

 

Chapter 16 숫자

 

숨겨진 수열 찾기, 최댓값 리스트 생성하기, 주어진 목표 값으로 나눌 수 있는 쌍의 개수 찾기, 총합이 특정 값인 부분 집합 찾기 등 여러 숫자 사이에 숨겨진 관계를 파악하여 풀어야 하는 문제 유형을 다룹니다. 곱셉, 나눗셈, 누적, 감소 등 각 숫자에 적용된 다양한 규칙을 찾아 풀면서 값들의 관계를 파악하는 훈련을 합니다.

 

Chapter 17 동적 계획법

 

동적 계획법이란, 직전까지의 단계를 수행해서 얻은 결과를 재사용하여 현재의 해를 찾으며 이를 프로그래밍 방식으로 구현할 때 동적으로 해의 테이블을 프로그래밍한다는 의미를 가지고 있습니다. 분할 정복과 유사하나 해결된 부분의 해를 집합에 넣고 이를 재사용하여 같은 부분 문제는 다시 연산하지 않는다는 점에서 다릅니다.

동적 계획법을 문제 풀이에 적용하려면 문제는 최적의 부분 구조여야 합니다. 이 말은 부분 문제는 2개 이상의 문제를 푸는 데 사용됨을 의미합니다. 이는 큰 해는 작은 최적해의 합을 의미합니다. 또, 중복되는 부분 문제여야 하며 답을 한 번만 계산하고 이를 재활용할 수 있는 구조여야 합니다. 동적 계획법을 적용하는 방법은 크게 2가지로, 하양식과 상향식입니다.

 

책의 총평

 

코딩 공부를 하고 싶은 사람에게 알고리즘 기본기부터 개념을 쌓을 수 있는 아주 좋은 책으로, 향후 개발을 함에 있어 확실히 도움이 될 것으로 보입니다. 그러나 내용이 너무 반복적으로 알고리즘 설명만 얘기를 하고 있어, 처음 도전하는 사람에게는 어려울 수 있습니다. 총 86개의 알고리즘 예시가 있는데, 이를 도서만 보면서 접근시 자칫 혼란을 줄 소지가 있어 보입니다. 저도 처음에는 도서에 나온 예시만 보고 하다 추후 깃 소스를 내려받아 확인하면서 다시 보니 내용이 상이한 부분이 더러 있습니다. 향후에는 완성도를 높이기 위해 깃 소스와 도서가 일치하면 좋을 거 같습니다.

 

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

 

beauty_1700966462439.JPG

 

beauty_1700970176622.JPG

 

beauty_1700970838957.JPG

 

 

파이썬을 공부하면 처음에는 굉장히 재밌다

 

다른 언어들에 비해 입문하는데 허들이 낮고

 

문법이 쉬워서 요즘 처음 개발 공부 언어로 입문하는데 파이썬만 한 게 없는 것 같다

 

파이썬은 보안뉴스(https://m.boannews.com/html/detail.html?idx=116756)에서

 

IT 업계에서 인기 프로그래밍 언어를 조사해 본 결과

 

파이썬이 1위라고 말했을 정도다

 

 

나도 그래서 파이썬으로 개발 공부에 입문했다

 

처음엔 너무 재밌었다

 

print('hello world')를 입력하면

 

바로 hello world가 출력됐다

 

print('hello world')

 

>>> hello world

 

 

하지만 그 재미도 잠시 개발 사고를 키우려면

 

알고리즘이라는 엄청난 벽이 여러분을 기다리고 있다

 

그런 알고리즘 공부에 도움을 줄 책이 있다

 

[알고리즘 인사이드 with 파이썬]이다

 

 

책을 보기 전에 알고리즘은 왜 공부해야 할까?

 

알고리즘은 문제 해결 능력을 향상시켜서 다양한 문제 상황에 대응할 수 있는 능력을 기를 수 있기 때문에 공부해야 한다

알고리즘은 코드의 효율성을 높여주므로 같은 문제를 해결하는 코드라도, 알고리즘 공부가 잘돼 있으면 더 빠르고 더 적은 자원을 사용해 문제를 해결할 수 있다

 

그래서 프로그래밍 언어를 배우는 것과 알고리즘 공부는 함께해 줘야 더 나은 개발자가 될 수 있기에 알고리즘 공부를 해줘야 한다

 

 

알고리즘 인사이드 with 파이썬의 목차는 이렇다

 

이 책은 파이썬 초보부터 읽을 수 있는 책으로

 

한빛미디어에서도 이 책을 초중급 이상부터 읽으라고 추천하고 있다

 

책은 바로 알고리즘으로 들어가는 게 아니라

 

파이선 기본 문법을 설명하고

 

파이썬 정규 표현식을 설명하고

 

파이썬 핵심 자료 구조에 대해 설명한 후

 

기본 알고리즘으로 들어가기 때문에

 

파이썬을 처음 공부한다고 해도 걱정할 필요 없이

 

이 책으로 알고리즘 공부를 시작해도 된다

 

 

책을 읽으면서 장점은 4가지였다

 

1. 책이 컬러다

 

그림이 컬러고, 그림 설명이 굉장히 잘 돼 있어서 이해하기 편했다

 

트리의 find를 예시로 보여주자면

 

그림만 달랑 있는 게 아닌 순서가 어떻게 되는지 그림에 잘 설명돼 있어서 이해하기 편했다

 

2. 알고리즘 문제가 많다

각 주제별 다양한 문제로 총 86개의 문제 풀이로 파이썬 알고리즘 기본기를 탄탄하게 해준다

 

문제는 난이도, 키워드 힌트, leetcode에서 몇 번 문제인지 알려준다

 

1번 문제를 자세히 보여주자면

 

실제 알고리즘 문제 푸는 흐름을 아주 잘 알려주고 있고

 

문제 정의를 읽고 문제 해결을 어떻게 해야 하는지, 해결 코드가 어떻게 되는지까지

 

17년 차 개발자가 쓴 책이라 하나의 흐름으로 잘 보여줘서 좋았다

 

3. 최신 책이다

 

개발은 하루가 다르게 바뀌기 때문에 최신 책으로 공부하는 게 좋다

 

이 책은 10월 19일에 출간된 책으로 아직 두 달도 안 된 따끈따끈한 신간이다

 

여러분이 파이썬 알고리즘 공부하며 코드를 타이핑하는데 에러 메시지가 뜰 일이 없을 것이다

 

간혹 오래된 책들은 책을 보고 타이핑을 했는데도 문법의 변화로 에러 메시지가 뜰 때가 있다

 

 

4. 예제 코드를 제공해 준다

 

책을 보고 타이핑하면 되는데 예제 코드가 왜 필요해? 라고 생각한다면

 

둘 중 하나다

 

프로그래밍 언어를 제대로 공부해 본 적이 없거나

 

뛰어난 타이핑 실력으로 오타가 나지 않거나

 

난 개발 공부를 시작하면서 컴퓨터는 아기라고 생각하며 공부하고 있다

 

일일이 하나하나 알려줘야 한다

 

예를 들어 hello world를 화면에 출력하고 싶다면

 

print('hello world')라고 입력해야 한다

 

위 코드에서 단 하나라도 빠지면 화면에 hello world가 출력되지 않는다

 

이건 아주 짧은 코드지만

 

만약 여러분의 정답 코드가 10줄 이상이 되는데 에러 메시지가 떴다면

 

에러 메시지가 뜬 곳을 찾아서 수정해야겠지만

 

내가 못 보고 지나친 곳에서 자꾸 에러 메시지가 떠서 내가 수정할 수 없을 수도 있다

 

그럴 경우를 대비해서 알고리즘 문제 정답 코드가 필요하다

 

초보 개발자의 코드와 17년 개발자의 코드는 당연히 다를 것이며

 

예제 코드는 내 코드보다 훨씬 효율적일 것이기 때문에

 

내 코드와 예제 코드를 비교하며 고민하는 것도 하나의 공부기 때문에

 

예제 코드는 반드시 필요하다

 

 

이렇게 [알고리즘 인사이드 with 파이썬] 책에 대해 알아봤다

 

이제 개발 공부 1년이 조금 넘은 초보 개발자의 생각에는

 

시중에 수많은 알고리즘 책들이 있지만

 

개발 초보자들은 그 많은 책들을 모두 보기 보다

 

한 권을 꾸준히 보고 익히는 게 더 효율적일 것 같다

 

이미 갖고 있는 책들이 있지만 파이썬 알고리즘 공부를 이 책으로 다시 시작하고 있다

 

여러분들도

 

[알고리즘 인사이드 with 파이썬] 책으로

 

알고리즘 실력과 프로그래밍 실력을 향상시켜 보자

 

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

 

 

알고리즘 인사이드 with 파이썬 책은 한빛미디어에서 출간된 책이다. 역시 믿고 읽어보는 한빛미디어. 이 책은 알고리즘 문제 86개를 섹션 별로 나눠서 설명해놓은 책이다. 처음부터 끝까지 읽어보니 알고리즘에 대한 모든 것들을 꾹꾹 눌러 담은 책이라, 알고리즘 시험을 앞두고 있는 사람들에게 추천해주고 싶은 책이다. 첫 장에서 파이썬 기본 문법에 대해 간략한 설명부터 시작해서, 기본 자료구조에 대한 내용들도 담겨있으며, 재귀, 탐색, 공간, 배열, 순열 및 조합 정렬, 검색 등 알고리즘에서 필수적인 요소들을 다 담고 있다. 기본적인 문제 부터 풀기 때문에 파이썬 개발자가 아니더라도 쉽게 읽을 수 있는 책이라 진입 장벽이 낮아서 좋은 것 같다.

 

이 책의 가장 큰 장점은 해설이 굉장히 꼼꼼하다는 점이다. 알고리즘 문제를 풀다보면, 그림을 그려가며 풀어가야하는 문제들이 많은 편인데, 그 그림들을 여기서 그려가며 꼼꼼히 설명해주고 있어서 이해가 더 잘 가는 것 같다. 저자가 책 만드느라 꽤 고생했을 것 같은 느낌 ㅋㅋ 코테 준비하시는 분들이라면 이 책을 한번쯤 읽어볼 것을 추천한다. 

 

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

전반적인 소감 및 마음에 드는 부분

알고리즘과 자료구조의 기본적인 내용을 소개하면서 이를 통해 코딩 문제 풀이를 설명한 책입니다. 자료구와 알고리즘을 설명하는데 이해하기 쉽도록 최대한 많은 그림이 삽입되었다는 점입니다. 보통 2차원 배열이라던가 트리 구조에서 순회하는 알고리즘들은 동작 방식이 한번에 와닿지 않는 경우가 많습니다. 그런 부분을 최소화 시키고자 그림을 통해 동작 순서를 자세하게 설명해줍니다. 아래 그림은 그런 예시들 입니다.

 

 

두 번째 장점으로는 오랜 시간동안 개발해온 저자가 엄선한 leetcode 86문제 입니다. 자료구조와 알고리즘을 설명해주고 이를 코딩문제에 어떻게 적용하는지 보여줍니다. 문제를 해결한 코드를 한줄한줄 자세하게 설명해줍니다. 특이한 점이 있다면 성능 분석도 같이 한다는 것입니다. 해결한 코드의 시간복잡도가 어느 정도인지 간략하게 알려주고 있습니다. 

 

 

대상 독자 및 책 난이도

알고리즘과 자료구조 기본 개념을 다시 한번 정립하고 싶은 개발자들이 기본 대상이지만 초보자들도 충분히 쉽게 볼 수 있습니다. 이 책의 목적은 보다 많은 개발자가 빠르고 안정적이고 효율적인 알고리즘을 개발할 수 있는 역량을 갖추도록 돕는 것입니다. 더 뛰어난 개발 산출물을 작성하고 싶은 개발자, 자신의 역량을 한 단계 높이고 싶은 분들께 도움이 될 것입니다.

핵심 자료구조인 스택, 큐, 연결리스트, 해시, 맵, 트리, 힙, 그래프를 다룹니다. 기본 알고리즘으로 정렬, 재귀, 탐색, 공간, 순열과 조합, 배열, 검색, 트리 등을 다룹니다. 각 알고리즘 설명에서는 단계별로 그림들이 동작 순서를 알려주기 때문에 이해하기 쉽게 구성되어있습니다. 

 

 

 

 

마음에 들지 않은 부분

전 IT 개발 서적들 중에서 프로그래밍 언어 기본을 다루는 책들을 제외하고 기본 문법으로 한 챕터를 잡아먹는 걸 극도로 싫어합니다. 예를 들어보겠습니다. 이 책의 핵심 주제는 자료구와 알고리즘 입니다. 자료구조와 알고리즘에 관심이 있는 사람들이 찾는 책이지 프로그래밍 기본 문법을 공부하려고 선택하는 책이 아닙니다. 즉 기본 문법을 설명하는 챕터가 있을 필요가 없다는 뜻입니다.

만약 설명하다가 기본 문법에 대한 설명이 필요하다고 하면 팁박스 혹은 주석으로 달아두면 됩니다. 이 부분 역시 예를 들어보겠습니다.

 

양쪽 모두 리스트에서 원소 접근법을 설명하는데 왼쪽은 챕터1의 기본 문법에서 오른쪽은 원형 큐 자료구조 설명하다고 나은 내용입니다. 동일한 내용을 2번이나 설명하고 있습니다. 기본 문법 책도 아닌데 왼쪽 페이지는 있을 필요가 없습니다. 오른쪽처럼 가볍게 설명하고 넘어가면 됩니다. 게다가 코루틴, 상속, 멀티 프로세싱과 챕터2 정규표현식은 왜 있는지 도저히 모르겠습니다. 설마 뒤쪽에 코루틴을 이용하여 알고리즘 구현하는게 있나 싶었지만 그렇지도 않습니다. 챕터1,2 합해서 약 40페이지는 쓸데없이 지면만 차지하여 책 값만 높이고 있습니다. 

 

 

 

결론

별로 추천하지 않습니다. 알고리즘을 적용하여 코딩 문제를 어떻게 풀어야하는지 궁금하시다면 '이것이 코딩테스트다 - 나동빈' 책을 추천드립니다. 자료구조와 알고리즘의 근본 동작이 궁금하다면 '이것이 자료구조+알고리즘이다 - 박상현' 책을 추천드립니다. 그러나 위 2권의 책을 사기는 부담스럽다라고 하신다면 이 책을 보시는 것도 괜찮습니다. 혹 파이썬으로 자세하게 설명해주는 자료구조+알고리즘+코딩테스트 책이 필요하시다면 볼만합니다. 차라리 챕터 1-4까지 없애버리고 'leetcode 86개 문제로 보는 자료고와 알고리즘' 이라고 제목을 지었으면 어땠을까 합니다. 그러면 약 200페이지가 줄어들게 되니 훨씬 더 효율적이지 않을까하는 생각입니다. 

 

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

[똑똑한 도서소개] 한빛미디어, 알고리즘 인사이드 with 파이썬


글 / 사진 : 서원준 (news@toktoknews.com


 

 


본 소개 글은 나는리뷰어다 서평단을 통해서 한빛미디어에서 도서를 제공받아 진행하였으며, 구매가이드(도서소개) 성격이 강합니다.


몇 년 전만 해도 붐이 일어난다고 미디어에서 엄청 띄우다가 지금 현재는 쏙 빠져버린 것이 한두 가지가 아닐 것입니다. 그런데 코딩도 예외가 없었습니다. 코딩 붐을 미디어에서 어마어마하게 띄웠다가 기억속에서 잊히게 만들었습니다. 언론의 풍선 효과는 지금도 여전히 작동하고 있습니다. A 이슈 한 번 떴다가 잊히게 만들고 B 이슈, C 이슈로 반복됩니다. 코딩 붐도 마찬가지였습니다. 


그런데 언론에서 한 때나마 코딩 붐을 부추기도록 한 언어는 베이직도 아니고 c언어도 아닙니다. 심지어 코볼, 포트란도 아니었습니다. 최근 한창 뜨고 있는 프로그래밍 언어이자 여러 용도로 다양하게 활용되고 있는 파이썬입니다. 파이썬 도서는 새로운 책이 꾸준히 출간될 정도로 러시를 이루고 있으며 컴퓨터 프로그래밍과 관련 없을 것 같은 경제, 경영학 분야까지도 파이썬이 영향을 미치고 있어 정말 중요하다고 생각되는 책입니다. 


 

 

 

 

 

 

 

 

 

 

 

 

 

 


이것 때문에 필자가 최근까지도 파이썬 프로그래밍 도서소개에 열을 올리고 있는 것입니다. 그런데 파이썬은 다양한 형태로 출간되는데요. 자주 다루는 내용 중에는 알고리즘과 자료구조가 결합되어 있는 파이썬 책도 있습니다. 이번에 출간된 알고리즘 인사이드 with 파이썬이 좋은 사례가 될 것입니다. 이 책은 86개의 코딩 테스트를 담고 있는 책으로 “해결 코드” 파일을 전체 제공해 줘 쓰임새가 워낙 많은 책입니다. 


파이썬과 알고리즘, 그리고 자료구조를 동시에 학습하다 보니 3가지에 대한 기본적 내용이 실려 있다는 점이 이  책의 특징이며 파이썬의 기본 문법, 자료구조에서 가장 중요한 스텍과 큐, 그리고 알고리즘의 기본까지 한 권에 모두 담았고 이렇게 갈고 닦은 이론을 바탕으로 실제 86가지 문제풀이로 문제에 대한 해결능력과 사고력을 키울 수 있도록 만들어졌습니다. 필자도 이 책으로 실습을 몇 개 해 보았습니다만 그간 파이썬에 대한 이해가 부족했는지 에러를 자주 범했습니다. 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


도서 소개를 마치면서


사실 알고리즘 인사이드 with 파이썬이 나오기 이전까지는 알고리즘, 자료구조. 파이썬을 따로따로 학습해야 했습니다. 그래서 파이썬 등 컴퓨터 프로그래밍 학습에 어려움이 많았습니다. 그런데 이제는 파이썬의 충실한 학습이 가능하게 되었다는 것은 긍정적인 변화라고 생각합니다. 


이 책은 파이썬을 깊이 들여다보고 싶으신 분들과 자료구조, 알고리즘을 이론이 아닌 실전에 적용하고 싶으신 분들은 꼭 읽어야 할 책입니다. 저처럼 컴퓨터 프로그래밍, 컴퓨터 과학, 컴퓨터 공학에 대해서 조금 알긴 하지만 제대로 배워서 알아야 할 분들에게도 필수적인 책이라고 생각해 봅니다.

 

파이썬 언어를 이용한 알고리즘 풀이 입문을 희망하는 모든 개발자들의 훌륭한 지침서가 되어줄 책

 

이 책은 Leetcode base의 문제들로 구성된 python 기반의 알고리즘 문제 풀이를 위한 지침서이다.

 

알고리즘이라는 학문은 전산학이 출현하기 이전부터 주목받았던 학문이다. 당시에는알고리즘이라고 불리지 않았을 뿐이지, 무엇인가 문제의 풀이. 그리고문제에 대한 접근 등등 이 모든 것들이 알고리즘의 한 형태였다고 이해하면 된다.

 

이러한 원초의 문제들에서 공통화된 문제 해결 방법을 도출하여 역은 것을 우리는 공식이라 하며 컴퓨터학에서는 이를알고리즘 기법이라고 한다. , 알고리즘은 하나의 정형화된풀이법인 동시에 효율적인 처리 방식을 술 한 학문이다.

 

이런 알고리즘이 엄청나게 주목받았던 시기는 아마도 구글이라는 회사의 출현과AI의 등장을 꼽을 수 있다. 10년 전쯤 세계 회사 복지 순위에 구글이 톱클래스에 뽑히며, 사람들 사이에 구글 입사에 관한 입소문이 돌았고, 그 사이에서 알고리즘을잘 푸는 프로그래머가 구글에 조인하는 일등 조건이다 (당시 구글은 창의력 문제로써 굉장히 독특한 문제도같이 출제하고 있었다.)라는 입소문이 돌았다. 무엇보다 이사실을 가장 잘 입증한 사건은 2015 ~ 2017년쯤에 등장하였던 이세돌과 알파고의 바둑 대결일 것이다. 이 당시 사람들은 알고리즘이 무엇인지, 어떤 학문인지에 대해서 잘모르고 있었지만 이세돌과 알파고의 대결을 보며 알고리즘의 대단함 그리고 알고리즘이 무엇인지에 대한 이해 수준이 높아졌다고 생각된다.

 

그렇기에 알고리즘이라는 학문은 위의 여러 사건들을 기점으로 많은 IT 회사에서 (국내의 경우 네이버, 카카오 등)차용하여 입사 프로세스의 한 과정에 포함시킴으로써 개발자들의 역량 중 가장 으뜸으로 평가하는 영역이 되었다.

 

이쯤에서 알고리즘이 왜 주목받기 시작했고 왜 많은 IT 회사들에서입사 프로세스에 차용하게 되었는지에 대해서는 각설하고, 위의 도서에 대해서 이야기해 보겠다.

위 도서는 python이라는 언어를 기반으로 세계적으로 유명한 알고리즘문제 사이트 leetcode의 문제 중, 비중이 높은 문제들을선별하여 풀이법을 역은 책이라고 할 수 있다.

 

더욱이 python의 자료구조에 상당 부분 중점을 두었다는 점에서위 책이 여러 기타 책들과 차이점이 있다고 할 수 있다.

 

따라서 python에 대한 문법적 지식이나, 자료 구조 정보가 미약한 프로그래머라면 위의 도서를 통해 학습해 보시길 권장한다.

 

【책의 구성】 "알고리즘 인사이드 with 파이"의 구성은?

 

이 책은 총 4개의 파트로 구성되어 있으며, 1파트와 2파트에서는 "파이썬의문법" "기본 자료 구조"를 설명하고 있으며 이후 3파트와 4파트에서는 "알고리즘 풀이"에 대해서 술하고 있다.

이번 리뷰에서는 챕터보다는 파트별로 선정하여 공통된 특징들을 추려 정리해 보았다.

 

 

1 - 2 파트

이 책이 기타 다른 알고리즘 도서와 차이점을 갖는 이유는 1파트와 2파트의 비중을 상당히 높게 두었기 때문이라 생각된다. 그만큼 알고리즘의 문제를 바로 접근하는 것도 의미가 있겠지만, 이미제공하는 lib 혹은 자료구조를 잘 알고 문제의 접근하는 것이 훨씬 중요하다는 것을 저자는 이미 알고있었기에 이 부분에 비중을 두지 않았을까란 생각이 들었다.

 

왜냐하면 알고리즘 테스트나 혹은 대회에서는 본인이 자료구조를 직접 구성하고 이에 대한 처리를 구현하는 것도 좋은접근 방법이 될 수 있으나, 이미 수십 년간의 경험치가 누적된 각 언어들의 lib, stl에서 관련 문제를 푸는 데에 필요한 유사 자료구조를 제공하지 않는 경우는 거의 없기 때문이다. 그렇기에 위의 파트를 심도 있게 학습한다면 추후 알고리즘 문제를 푸는 데에 있어서 한층 수월할 것이라 생각된다.

 

 

 

3 -4 파트

3파트와 4파트에서는 알고리즘문제를 제시하고 이를 어떻게 풀면 좋을지에 대한 아이디어 도출 그리고 코드화, 이후 풀이에 사용한 알고리즘평가 순으로 각 챕터가 구성되어 있다. 특히, Note 부분을통해 추가적인 팁을 제공하고 있다는 점에서 학습자에게 다양한 지식을 제공하기 위해 저자가 많은 노력을 기울였다는 생각이 들었다.

 

그리고 위의 문제들은 대부분이 (혹은 전부가) leetcode의 것을 참고한 것인 만큼. 기존의 leetcode 사이트 상의 영어로 인한 문제 접근에 어려움이 있던 분들이라면 위 책을 통해 이전보다 수월하게알고리즘이라는 학문을 실습할 수 있을 것이라 생각된다.

 

솔직히 leetcode의 지금까지 출제된 전체 문제 2941개 중에서 이 책에서 선별된 86개의 알고리즘은 핵심 오브핵심이라 생각하면 될만큼 의미가 깊은 문제들이다. 따라서 이 문제들을 하나하나 차근히 학습하길 권장한다.

 

【 알고리즘 인사이드 with 파이썬을 읽고 나서 】

 

한때 IT 업계에서는 알고리즘 문제의 풀이 수준이 곧 회사에서의 개발자의생산력 즉, 개발 능력이라고 생각했던 적이 있다. 하지만, 막상 알고리즘만을 잘하는 사람들을 개발 부서에 대거 앉혀 놓고 보니 솔루션의 전체적인 설계 수준과 가독력 그리고알고리즘 문제 외적으로 존재하는 수많은 문제의 해결에 있어서 그리 효율이 높지 못하다는 것을 깨닫게 되었다. 그리고이내 이에 대한 인터뷰 프로세스를 개선해가기 시작했다.

 

알고리즘이라는 학문은 굉장히 중요한 학문이 맞다. 하나의 문제가 주어졌을때 그 문제를 해결하기 위한 적당한 설계와 적정 수준의 문제 해결에 필요한 자료구조의 이해, 그리고이에 대한 접근법은 대부분의 프로그래밍에 있어 필수로 요하는 지식이기 때문이다.

하지만, 이에 못지않게 하나의 서비스를 설계할 때 이를 큰 그림으로펼쳐 각 부분의 유기적인 연관 관계를 파악하고 이를 효율적으로 연결하는 큰 그림을 설계할 줄 아는 능력도 중요하다.

 

그렇기에 알고리즘뿐만 아니고, DB, 네트워크, 소프트웨어 아키텍처, OS 등등 모든 학문에 있어서 적정 수준의심도 있는 지식을 쌓길 권장 드린다.

 

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

 

11-3.jpg

 

많은 IT 기업에서 개발자 채용시 코딩 테스트를 시행하고 있다. 이 코딩 테스트는 단순히 개발 언어를 잘 알고 있느냐가 아니라 주어진 문제를 잘 이해하고 해결 과정을 최적화된 알고리즘으로 잘 구현할 수 있느냐를 테스트하는 과정이다. 따라서 코딩 테스트에는 다양한 자료고와 알고리즘과 기반 지식을 얼마나 알고 있는냐를 판단할 수 있도록 구성되어 있는 것 같다.

 

많은 개발자들이 개발 언어에 대한 스킬을 높이는데 관심이 많은 것 같다. 하지만 개발자의 핵심 역량은 도구로서의 개발언어가 아니라 주어진 문제를 제대로 파악하고 구현하는 알고리즘 역량이라고 생각한다. 이를 통해 개발자로서 해결해야 하는 문제를 좀 더 잘 이해하고, 더 잘 구현할 수 있는 능력이 생기게 되는 것 같다.

 

이 책은 다양한 알고리즘 문제를 제시하고 혼자서 풀어볼 수 있도록 되어 있다. 이를 위한 준비단계로써 파이선 문법과 정규표현식을 Part 1에서 설명한다. Part 2에서는 기본 자료구조와 기본 알고리즘을 설명하면서 알고리즘 문제를 풀기 위한 기본 지식을 갖추도록 한다. Part 3부터는 알고리즘 풀이를 위한 문제는 제시한다. 카테고리별로 재귀, 탐색, 공간, 순열 및 조합, 배열 등 다양한 알고리즘에 대한 문제를 포함하고 있다. 각 문제마다 문제에 대한 정의와 문제 해결 방법, 해결 코드가 제시되고, 특히 해결 코드는 단순히 코드만 보여주는 것이 아니라 코드에 대한 자세한 설명이 있어서 코드에 대한 이해를 한층 높일 수 있는 것 같다.

 

파이썬 개발자라면 이 책을 통해 다양한 알고리즘 문제를 풀고 이해하는데 많은 도움이 될 것 같다. 굳이 파이썬 개발자가 아니더라도 자신한테 익숙한 개발 언어를 이용하여 문제를 풀어볼 수도 있을 것 같다. 개발 언어만 달라질 뿐이지 핵심 알고리즘이 달라지는 것은 아니기 때문에 문제 풀이를 통해 충분히 이해할 수 있지 않을까 생각한다.

 

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

 

 

한빛미디어에서 알고리즘 풀이 책이 나왔습니다. 파트 1에서 파이썬 기본 문법에 대해 설명하고 파트 2에서는 기본 자료구조와 알고리즘, 파트 3, 4는 알고리즘 문제풀이를 다루고 있습니다. 또한 부록으로 알고리즘 시간 복잡도, 빅 오 표기법에 대한 설명을 해주고 있습니다. 

책 내용은 그림과 코드를 적절히 섞어서 어려운 문제를 잘 설명해주고 있습니다. 하지만 그게 모든 사람들에게 잘 이해될지는 잘 모르겠습니다. 워낙에 알고리즘이 그냥 하루아침에 뚝딱 되는 게 아니니까요. 아무튼, 이 책은 코딩 테스트에 빈번하게 나오는 문제들을 다루고 있기 때문에 머릿속에 잘 저장해 두면 좋을 겁니다.

알고리즘을 책으로 공부한다고 치면, 아마도 한 권으로 뚝딱 끝내기는 어려울 겁니다. 그런 쪽으로 접근했을 때 이 책도 마찬가지입니다. 필자의 알고리즘 경험을 책에 잘 녹여주고 있지만 모든 사람에게 이해되는 수준은 아닐 겁니다. 이 책이 부족하기 때문이 아닙니다. 여러 책과 함께 읽으시길 추천드립니다. 

 



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


17년 차 베테랑 개발자가 직접 풀고 해설한다!


학생, 취준생, 주니어, 역량 개발이 필요한 모든 개발자를 위한

86개 문제 풀이로 사고력을 키우는 알고리즘 & 자료구조 입문서


오랫동안 많은 IT 기업은 인재를 선발하는 가장 효과적인 도구로 알고리즘 테스트를 활용해왔습니다. 문제 풀이와 개발 능력은 상관없어 보이지만, 알고리즘은 공부하면 할수록 구현 능력이 향상되고 논리력이 증가하는 '효율을 위한 도구'입니다. 이 책은 범용성 높은 프로그래밍 언어인 파이썬을 활용해 코딩 테스트에 자주 등장하는 문제 유형 86개를 풀이하는 과정을 살펴봅니다. 17년 차 S/W 아키텍트이자 개발자인 저자가 알려 주는 실무에도 유용한 해결 코드를 따라가다 보면 사고력과 문제 해결 능력의 기반을 다질 수 있습니다. 알고리즘이 처음인 학생, 코딩 테스트를 앞두고 있는 취준생은 물론이고 역량을 개발하려는 현직 개발자까지 자신의 수준에 맞춰 개념을 학습하고 문제를 풀이할 수 있도록 기본 이론과 문제 풀이, 해설까지 꼼꼼하게 담았습니다.


PART 1|파이썬 문법, 핵심만 뽑아보기 : 파이썬 핵심 문법과 정규표현식으로 기본기를 다지는 데 꼭 필요한 것들만 살펴봅니다.

PART 2|기본 자료구조와 알고리즘 : 스택, 큐, 트리, 검색, 정렬 등 개념부터 탄탄하게 다질 수 있습니다.

PART 3, 4|알고리즘별 문제 풀이 : 실무에 유용한 것은 물론 코딩 테스트에서 가장 자주 볼 수 있는 유형의 문제 86개를 엄선해 꼼꼼한 해설을 곁들였습니다.

PART 5|부록: 시간 복잡도와 코드 컨벤션 : 한 걸음 더 레벨업하고 디테일을 다지기 위해 알아 두면 좋을 시간 복잡도와 코드 컨벤션을 살펴봅니다.


이 책의 대상 독자


- 개발 역량을 한 단계 높이고 싶은 주니어 개발자

- 코딩 테스트를 앞두고 있는 취준생

- 개발의 기본기를 탄탄히 다지고 싶은 대학생


[서평]

알고리즘 인사이드 with 파이썬은 알고리즘과 자료구조를 처음 접하는 입문자들을 위한 책입니다. 이 책은 파이썬의 기본 문법을 가볍게 훑어본 다음 가장 기본적인 알고리즘인 스택, 큐, 링크드 리스트, 해시, 트리, 그래프와 같은 자료구조와 정렬, 문자열 검색, 그래프 등을 다룹니다.


이후 이를 바탕으로 탐색, 재귀, 순열, 정렬, 동적 계획법 등 심화 알고리즘 순으로 배치되어 있습니다. 이해를 쉽게 하기 위해 많은 그림이 포함되어 있으며, 해외 빅테크 회사 입사준비를 위해 알고리즘을 학습하는 사이트인 leetcode.com 에서 다루는 알고리즘 문제 중 86개를 엄선해 풀이하는 과정이 낱낱이 담겨 있습니다.


이 책은 입문자들이 쉽게 이해할 수 있도록 구성되어 있습니다. 저자가 입문자의 고충을 충분히 이해하고 단계별로 그림을 통해 이해하기 쉽게 최대한 자세히 설명하며 문제 풀이 과정을 보여주고 있습니다. 또한, 예제 코드를 제공하여 직접 실습해볼 수 있도록 도와줍니다.


알고리즘 인사이드 with 파이썬은 입문자들이 알고리즘과 자료구조를 쉽게 이해하고, 문제 해결 능력을 향상시킬 수 있도록 도와주는 책입니다. 이 책을 통해 알고리즘과 자료구조를 학습하고, 프로그래밍 능력을 향상시킬 수 있습니다.



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

알고리즘 책을 펼쳐본 게 얼마만인지 기억이 잘 나지 않는다.

분명 작업하면서 참고할 목적으로 학교 다닐 때 대학교수가 만들어 출간한 알고리즘 책을 교제로 봤던 것 같은데, 그 뒤로 몇 권인가 언어를 달리 하면서 알고리즘 책을 사서 봤던 걸로 기억한다.

문제는 처음부터 끝까지 다 읽어내진 못했다. 게을러서였는지 아니면 설명을 읽어보고 이해가 잘 되지 않게 매우 학술적으로 써서 거부감이 있었던 건지도 모르겠다.

근래 공부를 조금씩 하기로 작정한, 그래서 인강으로 파이썬 초급 과정을 보고, 뭔가 확인해보고 싶은 마음에 이 책, 저 책 보다가 발견한 게 이 책이다.

 

구성은 매우 간단하다. 문법, 기본 자료구조 및 알고리즘, 그리고 이를 응용해 풀 수 있는 문제들. 뭔가 독창적이라거나 학술적인 방식이 아니라, 기본에 충실하면서도 설명과 예제와, 이를 시각적으로 표현하는 그림들과 그 전개 설명, 그리고 이를 바탕으로 하는 알고리즘 풀이 문제들, 그것도 leetcode.com에서 추려낸 문제들. 다시 말해 어중이 떠중이 문제가 아니라 이미 검증이 된 문제들이라는 말이다.

알고리즘 책들이 흔히 저지르는 실수는 정말 간단하다. 너무 학술적으로 접근하는 경향이 있다는 것. 이는 내가 그 알고리즘을 이해하는 데 사실 1도 도움이 되지 않았다.

정말 필요로 하는 것은 명확한 설명과 이를 뒷받침해주는 그림들이다. 그래야 설명과 그림을 매치시켜가면서 단계를 이해할 수 있다. 아무리 알고리즘을 구현한 코드를 들이민다고 한들 머릿속에 그려내지 못하면 그건 이해했다고 할 수 없다. 매번 봐왔지만 아주아주아주 만족스러운 건 보지 못했다. 그런데 이 책은 어느 정도 내 요구사항을 만족시켜줬다. 비록 간간히 그림 속에 오타가 있어서 내가 잘못 이해한 건지, 그림이 잘못된 건지 확인하느라 끙끙댄 것만 뺀다면.

 

파이썬의 기초를 설명하면서 초급 과정에 나오지 않았던 내용들을 이해하는 데 좀 힘들었다. 언제나처럼 코드만 바라봐선 이해하기 힘들다. 결국 타이핑을 하든지 예제 코드를 받아서 돌려보든지, 실제로 돌려봐야 감이 오게 마련이다. 약간 안타까운 건, 이건 뭐지? 하는 코드도 조금은 들어 있었다는 거. 내가 이해를 못한 건지, 코드에 버그가 있었던 건지는 모르겠다. 많은 시간을 투자해서 다 검토해보진 못했으니까.

그래도 많은 부분은 파이썬에 대한 내 지식의 틀을 잡는 데 도움이 됐다.

이제 핵심 자료구조. 오, 이건 이렇습니다, 로 끝나지 않았다. 최소한 이게 왜 필요한지 개연성을 가지고 꼬리에 꼬리를 물면서 전개한다. 왜 이런 걸 만들어냈는지 소소하게라도 언급해서 좋다.

기본 알고리즘으로 알려주는 것들. 정렬, 그래프, 문자열 검색. 업무 특성 상 그래프는 제외하더라도 정렬과 문자열 검색은 정말 토 나올 정도로 자주 쓴다. 그러니 익히는 건 당연하다.

 

자, 문제들. 이게 문제다. 너무 많다. 단기간에 하기에는 매우 벅차다. 그래서 목표를 세워야겠다. 일주일에 2, 3개 정도 시도해보기. 전적으로 시간을 할애할 순 없으니, 차근차근 접근해야겠다. 그래도 맛보기 정도는 접근해봐야하니, 제일 처음으로 만나는 재귀를 봤다.

그렇다. 왜 재귀인가? 재귀하면 사람의 사고방식에 근접한 대신, 시스템 관점에서는 자원을 많이 써서, 잘못하면 스택 오버플로를 발생시킨다는 그 내용이 제일 먼저 떠오른다. 그래서 가급적 풀어서 구현하느라 애먹었던 게 한 두 번이 아니다. 요즘은 컴파일러들 성능이 좋아서 재귀적으로 작성해도 풀어서 성능을 최적화한다고 들었다. 그래서 뭐, 왠만하면 읽기 좋게 작성하는 게, 후임 개발자들한테도 도움이 될지 모르겠다.

앞서 말했던 메모리 이슈를 여기서도 빼먹지 않고 설명한다. 역시 기본에 충실하다. 코드 예제도 보여주면서 동시에 그림도 있다. 친절히 전개 순서도 알려준다. 이런 건 너무 좋다. 눈으로 차분히 따라가보면 조금씩 머릿속에 자리를 잡아간다, 그 개념들이.

 

이제 첫 번째 문제를 만났다. 홍수 채우기? 어떤 문제인지 설명하고 그 문제를 풀기 위한 의사코드를 제공한다. psuedo code를 의사코드로 변역했다. 뭐 원 발음대로 쓰기도 하고 유사코드라고도 하고, 아주 다양하게 불린다. 아무튼 이걸로 틀을 잡아줬다. 처음엔 이게 뭔가 싶지만, 나중에 계속 반복하다보면, 머릿속에 보통 이런 식으로 틀이 잡히더라. 그러니 익숙해지는 게 좋다.

해결코드를 보여주고 그로 인해 전개되는 걸 역시나 그림으로 설명해준다. 이런 게 너무 좋다. 답으로 코드만 보여주고 돌려보라는 무책임한 말은 안 한다.

좋다, 이런 식으로 반복해 문제들을 풀어가보면 잘 모르던 것들도 틀이 잡힐 것 같다.

 

주변에 새로 구직을 하는 분들을 가끔 보는데, 요즘은 코딩 테스트 기본으로 알고리즘 풀이를 한다고 한다. 그렇다면 어떤 책이든 알고리즘 풀이 연습도 하고 개념도 익혀야 할 텐데, 이 정도의 친절함이라면, 그리고 대세 언어 중 하나인 파이썬이라면 많은 도움이 될 듯도 하다.

간만에 맘에 드는 알고리즘 책을 찾았다. 아까 언급했다시피 오탈자 만날 때마다 검증 후 신고해야겠다. 살짝 봤는데 2건 신고됐더라. 내가 아직 제대로 파악 못한 부분들 같은데, 한 번 쭉 따라가봐야겠다.

 

 

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