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

한빛출판네트워크

쓰면서 익히는 알고리즘과 자료구조

알고리즘 설계 캔버스를 작성하며 배우는 알고리즘 문제 해결 전략

한빛미디어

집필서

판매중

  • 저자 : 윤대석
  • 출간 : 2021-03-29
  • 페이지 : 388 쪽
  • ISBN : 9791162244104
  • 물류코드 :10410
  • 초급 초중급 중급 중고급 고급
4.8점 (36명)
좋아요 : 7

직접 써보며 이해하는 가장 효율적인 알고리즘 문제 해결 과정 

 

알고리즘과 자료구조를 가장 효율적으로 학습할 수 있는 방법은 무엇일까? 바로 노트에 직접 알고리즘 문제 해결 과정을 써보면서 이해하는 것이다. 이 책은 ‘알고리즘 설계 캔버스’ 작성을 통한 문제 해결 과정을 보여준다. ‘알고리즘 설계 캔버스’는 제한사항, 아이디어, 복잡도, 코드, 테스트 영역으로 구성된 한 페이지짜리 노트로 일련의 알고리즘적 사고 과정을 보여주는 최적의 학습 도구이다.

 

각 장은 다양한 알고리즘과 자료구조(배열, 문자열, 연결 리스트, 스택, 재귀, 큐, 트리, 동적 프로그래밍, 정렬 등)의 기본적인 내용을 소개한 뒤, 관련 문제를 ‘알고리즘 설계 캔버스’의 항목별 내용을 쓰면서 풀어본다. 이 책을 통해 ‘알고리즘 설계 캔버스’를 직접 작성하면서 알고리즘과 자료구조의 이해를 넓혀 개발 역량을 키우고 코딩 인터뷰까지 대비해보자.

 

 

알고리즘 설계 캔버스 구성 요소

  • 제한사항(Constraints): 알고리즘 문제의 요구와 제한사항을 발견하고 기록하는 영역
  • 아이디어(Ideas): 문제를 해결할 수 있는 1~3개 정도의 접근 방법을 고려하는 영역
  • 복잡도(Complexities): 생각한 아이디어의 시간과 공간 복잡도를 추정하는 영역
  • 코드(Codes): 아이디어 영역에서 논의한 내용을 바탕으로 구현할 가치가 있다고 생각한 방법을 코드로 작성하는 영역
  • 테스트(Test cases): 구현된 코드의 테스트 케이스를 알아보고 코드 테스트를 진행하는 영역
  • 이 책의 코드는 파이썬 기반으로 작성되었습니다.
  • 예제 소스: github.com/daeseokyoun/learn-algorithm-by-writing

 

베타리더의 말

 

허민 _한국외국어대학교 정보지원처

다른 알고리즘 서적과 달리 몇 가지 차별화된 전략이 인상 깊었습니다. 노트 레이아웃(알고리즘 설계 캔버스)으로 사고 과정을 적어보고 비주얼라이저를 활용해 중간 단계를 눈으로 보며, 구현 과정의 상세한 도식화로 이해하는 과정 덕분에 알고리즘이라는 매운 양파 껍질을 하나 더 벗겨낸 느낌을 받았습니다. 

 

이준희 _가천대학교 학부생

알고리즘 공부를 시작하는 학생이고, ‘쓰면서 익히는’이라는 제목에 끌려 베타리딩을 신청했습

니다. 문제를 풀기 전 생각을 정리하게 해주는 노트 레이아웃(알고리즘 설계 캔버스), 과정을 보여주는 상세한 그림과 설명, 그리고 공부 후 다시 찾아보게 되는 노트 덕에 쉽게 다가갈 수 있었습니다. 

 

장대혁 _헤르스

이 책은 단순히 코딩 테스트를 위한 책이 아닙니다. 좋은 코드를 만들기 위해 알아야 하는 자료구조를 배울 수 있습니다. 수준 있는 개발자가 되기 위해서는 이런 공부가 필요합니다. 오래오래 개발자로 커리어를 이어가고 싶다면 이 책을 3번 읽고 개발 역량(좋은 코드 작성하기)과 취업 역량(코딩 테스트 통과하기) 모두 향상시키길 바랍니다.

 

김병진 _위메프

이 책은 개발을 하면서 직면하는 문제에 어떤 접근 방식으로 해결할 수 있는지 생각해보고, 어떤 알고리즘을 적용할 수 있는지에 대해 설명해줍니다. 그리고 그 방법이 절대 하나일 수 없다는 듯 하나 이상의 접근 방법으로 제시해주고 있어 다양한 접근 방식에 대한 사고를 할 수 있도록 도와줍니다. 이 책은 알고리즘을 처음 배우는 초심자에게 좋은 가이드 역할을 할 것이라고 생각합니다.

윤대석 저자

윤대석

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

 

들어가며

chapter 1 배열(Array)

1.1 배열의 이해

1.2 파이썬에서 배열(리스트) 사용법

1.3 두 수의 합 찾기

1.4 정렬된 배열에서 중복 제거

1.5 배열에서 삽입 위치 찾기

1.6 정렬된 배열의 병합

1.7 정렬된 배열의 정합

1.8 파스칼의 삼각형

1.9 배열에서 다수의 요소 찾기

1.10 배열의 회전

1.11 빠진 숫자 찾기

1.12 더 나아가기 위한 준비

1.13 부분집합(subsets)

1.14 단어 찾기

 

chapter 2 문자열(String) 

2.1 문자열의 이해

2.2 파이썬에서 문자열 사용법

2.3 회문(Palindrome) 확인

2.4 그룹 애너그램(anagram)

2.5 IPv4 / IPv6 검증 시스템

 

chapter 3 연결 리스트(Linked List)

3.1 연결 리스트의 이해

3.2 연결 리스트 연산

3.3 연결 리스트 문제

3.4 연결 리스트 뒤집기

3.5 순환 검출(Cycle Detection)

3.6 두 수 더하기

 

chapter 4 스택(Stack)과 재귀(Recursion)

4.1 스택의 이해

4.2 재귀(Recursion)의 이해

4.3 유효한 괄호 검증

4.4 재귀 연습문제

4.5 재귀 연습

 

chapter 5 큐(Queue)

5.1 큐의 이해

5.2 큐 연습

 

chapter 6 트리(Tree)

6.1 트리 자료구조의 이해

6.2 이진 트리(Binary Tree)

6.3 깊이 우선 탐색(Depth-First Search)

6.4 너비 우선 탐색(Breadth-First Search)

6.5 이진 힙(Binary heap)

6.6 트리 경로의 합

6.7 3번째 큰 수

6.8 이진 트리 반전

6.9 이진 검색 트리 검증

 

chapter 7 동적 프로그래밍(Dynamic Programming)

7.1 동적 프로그래밍의 이해

7.2 동일 합으로 배열 분할 문제

7.3 동전 교환

7.4 최장 공통부분 수열(Longest Common Subsequence)

 

chapter 8 정렬(Sorting) 알고리즘

8.1 거품 정렬(Bubble Sort)

8.2 삽입 정렬(Insertion Sort)

8.3 병합 정렬(Merge Sort)

8.4 퀵 정렬(Quick Sort)

8.5 팀 정렬(Tim Sort)

 

Appendix 부록

부록 A 알고리즘 문제 제공 사이트

부록 B 알고리즘 연습을 위한 노트 방법

부록 C 파이썬을 이용한 문제 풀이

부록 D 알고리즘 학습을 위한 사이트 소개

알고리즘 공부 어떻게 해야 할까?

배경지식은 충분히 공부했는데, 왜 알고리즘 문제에 접근조차 못 할까?

 

알고리즘 문제 해결 능력의 핵심은 ‘알고리즘적 사고력’입니다. 알고리즘적 사고력을 키우기 위한 가장 좋은 방법은 알고리즘 문제를 풀 때 여러 전략을 고민하고 해결 과정을 직접 노트에 써보는 것입니다.

 

한 페이지짜리 ‘알고리즘 설계 캔버스’는 이런 프로세스를 쓰기 좋은 학습 도구입니다. 제한사항, 아이디어, 복잡도, 코드, 테스트 영역으로 구성된 ‘알고리즘 설계 캔버스’는 일련의 알고리즘적 사고 과정을 명확하게 보여줍니다. 이 책은 ‘알고리즘 설계 캔버스’의 요소별 내용을 완성해가며 문제를 풀이합니다. 직접 ‘알고리즘 설계 캔버스’를 작성하면서 알고리즘 문제 해결 과정을 단계별로 따라가봅시다. 

 

[이 서평은 출판사의 지원을 받아 작성하였습니다]

 

두꺼운 알고리즘 책은 아니지만, 책을 보다보면 유형을 만들고 밀도를 높이기 위해 저자가 고민한 흔적이 보이는 책이었다. 

 

특히 그냥 답을 서술해주고 끝이 아니라 마치 수험자의 입장에서 어떻게 풀어야 할지 프로세스가 담겨 있다는 점에서 이 책은 코딩테스트를 준비하는 사람들에게 적합한 책일거라고 생각한다.

 

그렇다고 꼭 코딩테스트를 준비하는 사람에게만 적합한 건 아니다. 파이썬 기초문법을 배우고 뭘 해야할지 고민하는 사람에게도 적합할 거라고 생각한다. 

 

비전공자로서 처음 파이썬 문법을 배울 때 느꼈지만, 간단한 문법과 데이터 분석 라이브러리 활용법을 배우고 나면, '그 다음 스텝으로 뭘 해야하지? 뭘 해야 실력이 많이 늘 수 있을까?' 고민을 하게 된다. 제일 좋은 건 프로젝트를 진행해보는 거라고 많이들 얘기하지만, 막상 프로젝트를 진행하자니 뭔가 막막하다. 그렇게 혼란스러운 상태에 계속 있다보면 재미도 없고 그냥 놓게 된다. 내가 그랬다.

 

그럴 바엔 차라리 코드 구현을 잘 하기 위해서라도 알고리즘 공부를 하는 게 더 효과적일 거라고 생각한다. 알고리즘 공부를 한다고 무조건 코드를 잘 짜는 건 아니겠지만, 그래도 문제를 풀어보면서 코드 구현력이 조금씩 높아질 수 있는 가능성이 있기 때문이다.

 

특히 답뿐만 아니라 어떤 식으로 문제를 해결하는지 사고 과정을 배우고 싶다면 이 책을 읽으면 좋겠다.

프로그래머들은 취업하는 과정에서 코딩 인터뷰라는 것을 한다. 채용 과정에서 회사는 프로그래머의 역량을 확인해야 하는데, 게임기획자에게 기획자로서의 사고방식과 일을 해결하는 능력을 검증하는 것처럼 프로그래머는 코딩 인터뷰를 통해 그들에게 필요한 알고리즘과 자료구조에 대한 이해도를 객관적으로 검증해낼 수 있는 듯 싶다. <쓰면서 익히는 알고리즘과 자료구조>는 제목 그대로 알고리즘과 자료구조를 효율적으로 익힐 수 있는 방법을 제시하려 한다.

 

이 책을 읽게 된 이유는 코딩 인터뷰를 준비하기 위함은 아니고, 알고리즘적 사고력이란 것을 알고 배우기 위해서였다. 개인 개발을 하다보면 정확한 상황을 검색하면 그것에 대한 코드를 알려주는 사람은 있어도, 어떻게 해서 그런 코드를 작성해냈는지, 그렇게 작성할 수 있는지 알려주는 사람은 없다. 그저 최대한 이해한다손 치는 건데, 이번에 읽어볼 수 있는 책 중에서 <쓰면서 익히는 알고리즘과 자료구조>라는 책이 있어 알고리즘을 배우면 좀 더 코드를 작성하는데 있어 문제 해결력이 상승하지 않을까란 기대감을 가졌다.

 

알고리즘 문제를 해결하기 위한 능력인 알고리즘적 사고력을 높이기 위한 방법으로 <쓰면서 익히는 알고리즘과 자료구조>는 그 문제를 푸는 모든 과정을 노트에 적는 것을 제시한다. 그렇게 노트에 적는 방법을 레이아웃화시킨 것이 '알고리즘 설계 캔버스'인데 이 책은 각각의 주제에 관련한 문제들을 제시하고 그것을 '알고리즘 설계 캔버스'를 이용하고 도식화하여 푸는 과정을 하나하나 설명한다. 수학 문제에 대입하면 그 문제를 푸는 풀이법을 정리한 셈이다.

 

'알고리즘 설계 캔버스'는 크게 다섯 영역으로 구분된다.

- 제한사항(Constraints): 알고리즘 문제의 요구와 제한사항을 발견하고 기록하는 영역

- 아이디어(Ideas): 문제를 해결할 수 있는 1~3개 정도의 접근 방법을 고려하는 영역

- 복잡도(Complexities): 생각한 아이디어의 시간과 공간 복잡도를 추정하는 영역

- 코드(Codes): 아이디어 영역에서 논의한 내용을 바탕으로 구현할 가치가 있다고 생각한 방법을 코드로 작성하는 영역

- 테스트(Test cases): 구현된 코드의 테스트 케이스를 알아보고 코드 테스트를 진행하는 영역

 

저자가 바라는 것은 문제를 내고 독자가 답을 맞추길 바라는 게 아니고, 문제 해결 능력 자체를 얻는 것이기 때문에 문제의 종류 자체가 많진 않지만 챕터마다 주제를 나누고 각 문제에 대해 마치 과외를 하듯이 문자는 물론 도식화까지 이용하여 하나하나 설명해준다. 언어는 파이썬을 기반으로 하고 있지만 마치 코드 한줄 한줄 설명을 하듯이 디테일한 내용을 담고 있고, 서술 위주이기 때문에 파이썬을 (알면 좋겠지만) 모른다 하더라도 자신이 알고 있는 언어에 대입해 이해하는 것에도 크게 무리가 없는 편이다.

 

책에서 다루고 있는 주제는 크게 8가지로 나뉜다.

배열, 문자열, 연결 리스트, 스택과 재귀, 큐, 트리, 동적 프로그래밍, 정렬 알고리즘.

앞서 말한 것처럼 '답'이 아니라 문제를 푸는 과정을 통해 해결 능력 상승을 목표로 하기 때문에 책을 완독한 이후에도 지속적으로 무얼 배워야 할 지 방향성도 제시하고 있다.

 

책 내용 자체가 (주제에 따라선 깊은 내용도 있지만) 요구하는 기본적인 지식의 수준이 낮은 편이기 때문에 책에서 얘기하는 것처럼 코딩 인터뷰를 준비하는 사람이나, 알고리즘에 관심있는 개인 개발자라면 이 책을 통해 어느 정도 궁금증을 해소할 수 있을 것이라 기대한다.

 

 

 

쓰면서 익히는 알고리즘과 자료구조

 

 

윤대석-알고리즘-01.png

 

자료구조나 알고리즘 도서를 떠올리면 오래전부터 몇 권의 도서를 읽었기 때문에 공통된 목차의 포맷적인 부분이나어떤 내용을 다룰지가 예상되는 부분이 어느 정도 있다. 그럼에도 불구하고 자료구조와 알고리즘 도서를읽는 것은 즐겁다. 특히 근래에 출간되는 도서들은 나름의 특색이 있고 저자들의 노하우나 공략 포인트를담고 있어서 읽는 재미가 있다. 다른 한편으로는 분명 실무에 많이 사용되고 있으나 아직도 정복하지 못한부분이 많이 있기 때문에 배움의 관점으로 얻는 즐거움이 있다.

 

쓰면서 익히는 알고리즘과 자료구조는 두가지 의외의 부분이 있었는데, 커널과BSP 경력을 가진 저자가 파이썬을 기반으로 자료구조와 알고리즘을 다웠다는 점과 상당히 책이 얇은 책이다라고 생각을 했는데 370 페이지가 넘는다는 점이다. 후자에 대해서 말을 하자면 이렇게 얇은 책이면 특정 자료구조나 알고리즘만을 다룰 것이다라고 예상을 했는데 의외로 많은 부분은 다루고 있고, 이것은 목차만봐도 대부분의 자료구조를 다루고 있지 않는가

 

1. 배열(Array)

2. 문자열(String)

3. 연결리스트(LinkedList)

4. 스택(Stack)과재귀(Recursion)

5. (Queue)

6. 트리(Tree)

7. 동적 프로그래밍(DynamicProgramming)

8. 정렬(Sort) 알고리즘

 

무엇보다 이 책의 특징은 알고리즘 설계 캔버스를 작성하며 배우는알고리즘 문제 해결 전략라는 부제에 맞춰 문제해결에 대한 다양한 아이디어를 중점으로 서술하고 있다는부분이고, 이것을 위해서 저자는 알고리즘 설계 캔버스를 구성하자고 제안하고 있다.

 

윤대석-알고리즘-02.png

 

 

이것은 ConstraintsIdeas,Complexities, Test cases와 코드를 이용하여 구성하고 있다. 매 챕터에서단순히 자료구조를 배우고 마무리 하는 것이 아니고, 문제 해결을 다양하게 접근해보자, 다양하게 접근하기 위해서 설계 캔버스를 작성하여 효율성 높은 해결 방법을 도출해보자는 내용이다.

 

윤대석-알고리즘-03.png

 

가령 가장 처음 나오는 두 수의 합 찾기에 대해서는 시간 / 공간복잡도를 구성해보고 해당 아이디어를 코딩하는 것으로 시작해서, 또다른 접근 방법으로 해시 테이블을 사용하는방법을 제안한다. 앞서 말했듯이 근래의 자료구조/알고리즘도서는 자신만의 특색을 갖추고 있는 경향이 있는데, 이것이야 말로 이 책의 특색이자, 저자가 포커스해서 독자에게 전달하고자 했던 의도일 것이고 그제서야 서문에서 밝힌 지은이의 말에 많은 공감되었다.

 

윤대석-알고리즘-04.png

 

장점은 문제 해결에 대해서 다양한 방법을 생각하고 시도해보도록 제시하는 내용의 흐름으로 본문을 구성한 점이 너무좋았습니다. 익숙히 알고 있는 자료구조에 대해서 이러한 플롯으로 다양한 시도를 유도하는 저자의 의도가느껴져서 번역서가 아닌 국내 저자에 의해서 이러한 도서가 쓰여졌다는 점이 너무 좋았네요 말하기는 애매하지만, 자료구조와 알고리즘의의 A-to-Z를 기대하고 본 도서를 선택했다면 목적과는 부합되지 않았을거라는 생각이 듭니다.

 

자료구조와 알고리즘이 나름 방대한 분야여서 비록 자료구조에 익숙하더라도 이 책의 의도대로 다양한 방법으로 문제해결을시도하려고 한다면 읽는 즐거움을 느낄 수 있는 책이었습니다.

 

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

 

 

 

알고리즘은 직접 써보지 않으면 배우기 어렵다고 생각합니다 

하지만 이  책은 책을 읽는 사람들에게 직접 사용할수 있게 초점을 맞춰서 좋습니다

자세한 리뷰는 https://allhpy35.tistory.com/58

 

KakaoTalk_20210524_001011891.jpg

 

 

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

 

photo_0.JPG

 

 

[한 줄 평]

"스스로 고민하고 습득하는 알고리즘"

 

[도서 리뷰]

대학시절, 학교에서 지원하는 튜터링 프로그램에 참여하여 튜터로 활동한 경험이 있습니다. 그 당시 제가 컴퓨터 전공에서 가장 중요하다고 생각하는 기준으로 튜터링 과목을 "자료구조"와 "알고리즘"을 선택했습니다. 그래서 이 책을 읽으면서 튜티들과 열성적으로 공부를 했던 기억이 새록새록 떠올랐습니다.

그때는 학생 신분으로 전공시험에 나올 법한 이론을 위주로만 공부했었는데 이 책은 여타 다른 알고리즘 서적과 달리 문제 접근 방법을 설명하고 여러 방식으로 풀이하는 것이 인상깊었습니다. 그리고 관련한 알고리즘 문제 사이트를 같이 제공해주어서 바로 실전으로 적용해 볼 수 있는 것이 큰 장점인 것 같습니다. 특히 이 책은 노트 레이아웃을 제안하고 노트 레이아웃 형태로 문제 풀이를 설명하는데 실제로 동일 방식으로 알고리즘을 공부한다면 좋은 습관 형성과 실력 향상에 큰 도움이 될 것으로 보입니다.

우스갯소리로 "IT개발은 Ctrl+C/V 지."라는 이야기를 많이 들었던 것 같습니다. 하지만 이해하고 사용하는 것과 그저 가져다 붙여쓰는 차이가 크다고 생각하기에 초심사의 마음으로 돌아가 이 책을 꼼꼼히 정독해야겠습니다.

 

[도서 추천]

모든 개발자에게 이 책을 추천하고 싶습니다.

알고리즘과 자료구조는 프로그래밍에 있어서 기초이자 핵심이라는 생각에 변함이 없기에.

형광펜 내가 칠한거 아니다.

알고리즘 설계 캔버스를 작성하며 배우는 알고리즘 문제 해결 전략

 

윤대석 지음

 

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

 

벌써, 5월.

이번 나는 리뷰어다 활동 책은 윤대석 님의 쓰면서 익히는 알고리즘과 자료구조이다.

 

4월에 이직 후에 전혀 신경을 못 쓰고 있다가 마감날이 가까워졌다는 걸 인지하고 부랴부랴 책을 폈다.

 

개발 공부를 하면서 모든 사람들이 알고리즘과 자료구조는 기본적으로 공부를 해야 하는 과목이라고 이야기를 한다.

하지만 이 시점에 내가 궁금한 건, 그렇게 말씀하신 본인들은 알고리즘과 자료구조 공부를 제대로 하셨나이까?

(나라는 사람이 그랬다. 중요하다 생각하고 주위에도 그렇게 이야기하면서 정작 나 자신은 그.러.질. 못했다. 죄송합니다 주위분들!)

 

학교를 다니면서 수강 과목으로 소화하긴 했지만 과제와 시험에 치중된 부분 위주의 공부로 인해 머릿속에 깊게 남은 것이 없다.

 

여러 단어들의 반복적인 나열이었을 뿐...

 

그래서 이번에 5월 리뷰 도서는 꼭 봐야지 라는 생각으로 신청했지만, 역시나 다 보지 못했다.

하지만 시간이 걸리더라도 완독은 분명히 할 것이다.

(어디 가서 개발자 인양 이야기를 하려면 뭐가 뭔지 명칭이라도 알아야지!!)

 

지은이가 말하는 알고리즘 공부란 본인의 역량이 월등히 발전했다고 체감하기 힘들고, 동기부여가 상대적으로 부족할지도 모른다고 이야기한다. 사실 본인도 공감하는 바였다. 최근에도 더 실무에 가까운 스프링에 대한 깊이와 JPA 활용에 대한 공부를 하고 있고, 클라우드에 대한 리서치를 진행하는 중이기 때문에, 알고리즘이란 마치 정보처리입문과 같은 너무나도 이론적이고 개론적인 학습이라 생각했기 때문이다.

 

하지만.

날아다니는 개발자와 보통의 개발자들의 차이는 알고리즘에서 차이가 난다.

보통의 개발자들은 필요한 기능을 구현해 내는 것이 목적이지만,

날아다니는 개발자는 그 속에서 문제를 찾아내고, 개발 품질 향상에 큰 기여를 할 수가 있다.

 

아직 주니어 개발자들에게는 크게 와닿지 않을 수도 있겠다.

머리로는 필요성을 느끼겠지만 그들 역시 실무에 치중된 공부를 하고 있을 테니...

 

하지만 모두가 인정하는 한 가지는,

유명한 IT 기업들은 알고리즘을 필요로 하는 코딩 테스트를 진행한다.

코딩 테스트를 통과하지 못하면 유명한 회사에 입사할 수 있는 가능성이 현저히 떨어진다는 이야기다.

 

그.만.큼!

알고리즘과 자료구조는 굉장히 중요한 공부이다!

 

그럼 이제 책을 살펴보자.

이 책은 독특하게 노트 레이아웃을 이용한다. hiredintech 사이트에서 제공하는 알고리즘 설계 캔버스를 보자.

 

https://www.hiredintech.com/courses/algorithm-design

 

 

HiredInTech's Training Camp for Coding Interviews

Algorithm Design for Tech Interviews Ace the Tech Interviews This course prepares you for the algorithmic problems at your tech interviews. The course covers several algorithmic areas. For each area you will find introductory theoretical lessons and a set

www.hiredintech.com

이 레이아웃을 활용하면 문제 해결 과정에서 실수할 수 있는 부분을 줄일 수 있을 것이라고 한다.
자세한 내용은 사이트 및 본 책을 꼭 보고 확인하도록 하자.

 

책은 자료구조와 알고리즘을 분류하여 구성되어 있다. 코드는 파이썬으로 만들어졌고, 필요한 라이브러리 호출에 대한 설명도 있다.

(고로, 코딩을 많이 접해보지 못한 분들은 파이썬에 대한 공부를 1회전은 하고 이 책을 보시는 게 좋겠다!)

 

챕터는,

1장 - 배열 (Array)

2장 - 문자열 (String)

3장 - 연결 리스트 (Linked List)

4장 - 스택 (Stack)과 재귀 (Recursion)

5장 - 큐 (Queue)

6장 - 트리 (Tree)

7장 - 동적 프로그래밍 (Dynamic Programming)

 

총 7장으로 구성되어 있고, 이 책을 학습하고 나면 온라인 코딩 사이트의 easy, medium 난이도 수준의 문제는 어느 정도 접근이 가능하다고 말하고 있다.

 

그리고 가장 중요한 것은, 총 387 페이지로 구성되어 있다는 것이다.

본인은 개발 공부를 하면서 나름 방법 아닌 방법이 있다.

어떤 새로운 분야에 대한 공부를 시작하고자 한다면, 시중에 나와 있는 책들 중에 가장 페이지수가 작은 책을 산다.

(물론 한빛미디어 급의 출판사 네임밸류는 있어야 한다.)

그렇게 책을 1회전 한 후에, 더 공부가 필요하다 싶으면 그때 좀 더 두께가 있는 책을 사전처럼 활용하는 편이다.

 

시중에 나와 있는 알고리즘과 자료구조 관련 책중에 이 정도 두께는 얇은 편은 아니지만, 충분히 독파가 가능한 페이지다.

물론 더 페이지수가 적고 보기 편한 책들이 있겠지만, 한빛미디어를 믿어보자.

 

그리고 필자의 중요한 말이 있다.

"어떤 학습이든 너무 쉽거나, 너무 어렵게 느껴진다면 현재 자신의 위치를 다시 파악할 필요가 있다. 억지로 학습을 이어가다 흥미를 잃어버릴 수 있다는 점을 명심하자."

 

굉장히 공감한 말이다. 개발자 몇 년 차라는 껍데기에 숨겨진 현재 자신의 위치를 아는 것이 굉장히 중요하다.

 

여러분들 모두, 이 책을 보고 공부하면서 지금 내가 어느 위치에 있는지 알았으면 좋겠다.

(본인도 대충 예상은 되지만 어느 위치에 있는지 알아가 보도록 하겠다 ㅠㅠ)

 

쓰면서 익히는 알고리즘과 자료구조를 통해 스스로 발전하는 나 자신을 발견하도록 하자.

 

오늘도! 내일도! 파이팅!

 

 

 

 

IMG_7731.jpeg

 

 

 

알고리즘 공부를 시작했다.

알고리즘의 필요성에 절절히 동감했다기보다는 '이직할까...?' 하니 이름 좀 있다 싶은 곳은 코딩 테스트를 안 보는 곳이 없어서.

(재미없어서 미적미적하는 둥 마는 둥 하고 있다.)

 

 

몇 권의 알고리즘 책을 가지고 있다.

이 책이 기존 책들과 다른 점이 몇 개 있는데, 개중 흥미로웠던 것은 노트 레이아웃을 이용해 문제에 접근하는 방법을 알려주고 있다는 것.

 

 

알고리즘 설계 캔버스?

 

 

IMG_7732.jpg

 

 

 

그렇다고 한다.

 

 

배열, 문자열, 연결 리스트, 스택, 재귀, 큐, 트리, 동적 프로그래밍, 정렬 알고리즘까지. 총 8개의 챕터로 구성되어 있다. 이론적인 설명을 시작으로 위에서 이야기한 노트 레이아웃을 통해 문제에 접근하고 풀이 과정을 스텝 바이 스텝으로 진행한다.

프로그래밍 처음 배울 때 다짜고짜 키보드에 손부터 올리지 말고 항상 노트를 가까이하라는 이야기를 들었었다. 다짜고짜 키보드에 손부터 올리면 정신없이 코드를 짜다가 '어엇' 하면서 많은 것들 다시 뜯어고치거나 때로는 아예 처음부터 다시 짜야 할 경우도 생긴다.

알고리즘도 어떤 식으로 문제에 접근하고 풀어나갈지 먼저 방향을 잡고 들어가야 한다는 건 알고 있었는데 '알고리즘 설계 캔버스'라는 게 있는지는 처음 알았다.

노트를 채워가는 과정이 곧 사고 흐름의 방향을 결정하는 일이라 매우 유용하다고 느꼈다.

예전 프로그래밍 처음 배울 때, 틈만 나면 손 코딩하던 시절 생각도 나고, 노트 정리 덕후로서도 꽤나 마음에 드는 방법.

 

 

이론 설명 → 노트 레이아웃을 이용한 문제 접근 및 풀이 → 관련 문제 사이트

이런 구성으로 각 챕터가 전개되는데, 아예 처음 들어보는 개념이 아니라면 관련 문제 사이트 접속해서 문제 먼저 풀어보고 이론, 노트 레이아웃을 봐도 좋겠다.

 

 

기존 책들이 다양한 케이스의 문제와 풀이 방법에 초점을 맞추고 있다면, 이 책은 문제에 접근하고 해결해나가는 과정 그 자체에 초점을 맞추고 있다.

알고리즘 책 몇 권을 가지고 있음에도 잘 선택한 책이라는 생각이 든다.

 

 

 

**

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

**

 

 

 



 

파이썬을 활용한 자료구조 위주의 알고리즘 문제들에 대한 접근법에 대해 적힌 책입니다. 기본적인 파이썬 및 자료 구조에 대한 이해도가 있는 분들이 접하면 좋은 책으로, 어떻게하면 최적화된 데이터 서칭 및 정렬, 다중 트리에 대한 접근이 가능한지 등 다양한 정보들이 있어 좋았습니다.

 

이 책은 자료 구조에 대한 문제 풀이 능력을 더욱 향상시키고 싶으신 분들이 읽게 되다보니 크게 문제가 되진 않겠지만, 조금 더 재미있는 예시가 있으면 좋지 않았을까? 라는 생각이 들었습니다. 그만큼 실제 업무에 반영할 수 있는 부분이 많을 것이므로 호불호의 영역이 되겠단 생각도 드네요. 개인적으로 동적 프로그래밍 위주로 보았던 것 같고, 다른 다중 트리 등에 대해서는 참고만 하는 정도로 읽었습니다.

 

중급 수준의 자료 구조를 다루는 파이썬 사용자분들께 추천드리며, 다른 언어를 쓰시더라도 파이썬에 대한 기초 지식 및 자료 구조에 대한 이해가 있으시다면 접근하시는데에 큰 문제는 없을 것으로 예상됩니다. ^^20210523_221711.jpg

 

파이썬을 활용한 자료구조 위주의 알고리즘 문제들에 대한 접근법에 대해 적힌 책입니다. 기본적인 파이썬 및 자료 구조에 대한 이해도가 있는 분들이 접하면 좋은 책으로, 어떻게하면 최적화된 데이터 서칭 및 정렬, 다중 트리에 대한 접근이 가능한지 등 다양한 정보들이 있어 좋았습니다.이 책은 자료 구조에 대한 문제 풀이 능력을 더욱 향상시키고 싶으신 분들이 읽게 되다보니 크게 문제가 되진 않겠지만, 조금 더 재미있는 예시가 있으면 좋지 않았을까? 라는 생각이 들었습니다. 그만큼 실제 업무에 반영할 수 있는 부분이 많을 것이므로 호불호의 영역이 되겠단 생각도 드네요. 개인적으로 동적 프로그래밍 위주로 보았던 것 같고, 다른 다중 트리 등에 대해서는 참고만 하는 정도로 읽었습니다.중급 수준의 자료 구조를 다루는 파이썬 사용자분들께 추천드리며, 다른 언어를 쓰시더라도 파이썬에 대한 기초 지식 및 자료 구조에 대한 이해가 있으시다면 접근하시는데에 큰 문제는 없을 것으로 예상됩니다. ^^

 

 

 

 

 

 

 

 

 

 

 

 

[장점]

- 알고리즘 해결 과정에 대한 이해

이 책을 통해 알고리즘 해결 과정에 대한 이해를 할 수 있습니다. 매번 아래와 같은 과정을 통해 알고리즘을 해결합니다. 그렇기 때문에 다른 문제를 만나도 아래 과정처럼 알고리즘 해결을 할 수 있는 능력을 키울 수 있습니다.

1. 문제 설명

가장 먼저 해결해야할 문제를 설명합니다.

 

2. 제한사항 파악

문제에서 제안사항을 파악하고 도출합니다.

 

3. 아이디어

문제에 대한 설명과 파악한 제한사항을 이용하여 아이디어를 생각합니다. 가장 먼저는 단순한 아이디어를 생각해보고 그 다음엔 더 효율적인 아이디어를 생각해봅니다.

 

4. 구현

아이디어를 실제 코드로 구현해봅니다.

 

5. 테스트 케이스

다양한 테스트 케이스를 통해 제대로 동작하는 지 확인해봅니다.

 

- 다양한 문제 풀이

이 책에는 배열, 문자열, 연결 리스트, 스택과 재귀, 큐, 트리, 동적 프로그래밍, 정렬과 같은 큰 카테고리에 다양한 문제들을 제공하고 있습니다. 이를 통해 기본적인 알고리즘 해결 능력을 기를 수 있습니다.

 

- 파이썬

파이썬 코드를 통해 알고리즘 해결하는 방법을 제공합니다. 파이썬을 공부하고 싶거나 파이썬 언어로 알고리즘 공부를 하는 분들에게 좀 더 적합한 서적이 아닐까 생각합니다.

 

 

[총평]

좀 더 효율적인 개발을 위해서는 알고리즘과 자료구조를 이해하는 것은 굉장히 중요합니다. 그리고 실제 업무 영역에 있어서 내가 알고 있는 알고리즘과 자료구조를 적절한 곳에 적용하는 것도 굉장히 중요합니다. 그래서 지속적으로 공부하고 연습해야하는 것이 알고리즘과 자료구조가 아닐까 생각합니다. 이 책은 노트를 이용한 레이아웃을 통해 알로리즘과 자료구조를 이용한 문제 해결 방법을 제시하고 있습니다. 그리고 실제 문제 해결을 하는 방법을 과정을 통해 설명하고 있습니다. 알고리즘를 어떻게 해결해야하는지 막막한 분들이라면 이 책이 그 가려운 부분을 긁어줄 수 있는 대안이 되지 않을까 생각합니다. 그리고 파이썬을 통해 알고리즘을 해결하는 방법을 보여주고 있어 파이썬을 공부하려는 분들에게는 좀 더 도움이 되지 않을까 생각합니다.

알고리즘 문제들을 여러 방법, 자료구조를 이용하여 해결하는 과정을 설명하고 있다.

알고리즘 해결에는 요즘 많이 사용하는 파이썬을 사용하고 있는데, 문제 풀이에는 복잡한 문법은 없어 평소에 파이썬을 사용하지 않아도 어렵지 않게 코드를 이해할 수 있었다.

실제로 어떤 문제를 접했을 때 해결해 나가야 하는 순서대로, 긴 문장보다는 간결한 코드와 그림을 많이 사용하려 하고 있어 전체적으로 술술 읽히는 느낌이 난다고 생각한다

최근 개발자 채용이 늘어나면서 덩달아 많은 관심을 받게된 컴퓨터 과학의 한 갈래는 단연 자료구조와 알고리즘일 것이다. 대부분의 기업에서 코딩 테스트를 여러가지 목적으로 필수적으로 진행하고 있기 때문에 테스트에서 활용하는 자료구조와 알고리즘은 취업 준비생 또는 이직을 준비하는 사람들에게 필수불가결한 내용이 되었다.

단순히 자료구조와 알고리즘에 대해서 다루는 것이 아니라 아예 코딩테스트를 타겟으로 출판된 책들도 다수 있다. 그러면 기존에 출판된 코딩테스트 대비 또는 자료구조/알고리즘 책과 본 도서의 차이는 무엇일까? 책에서 다루는 주제는 기존의 출판된 책들과 크게 다르지 않거나 오히려 책의 두께가 얇은 편이므로 일부 빠지는 내용도 있는 것으로 보인다. 물론 자주 출제되는 유형은 대부분 다루고 있으므로 그 부분에 대한 걱정은 하지 않아도 될 것이다. 가장 눈에 띄는 차이점은 아래와 같은 프로세스를 통해서 코딩 문제를 해결하는 루틴을 형성할 수 있다는 점이 이 책의 가장 큰 특장점이라고 생각된다. 

프로그래밍을 하는 사람 중 일부는 종종 생각도 하기 전에 코드를 쓰려는 나쁜 습관이 있다 (내 얘기다). 이것은 굉장히 나쁜 습관이며 프로그래밍은 생각과 고민을 굉장히 많이하고 작성하기 시작해야한다. 알고리즘 문제 풀이는 서비스 코드에 비해서 단편적인 코드 작성을 하는 경우가 많으므로 이런 연습을 하기에는 최적의 조건으로 볼 수 있다. 특히 생각없이 문제를 푸는 경우 문제를 본다 -> 코딩을 한다 -> 채점을 하고 나서 시간/공간 복잡도를 생각해본다의 순서인데 책에서는 이것을 제한사항을 생각하고 시간/공간 복잡도를 고려해서 아이디어를 도출 후 코드를 작성하고 마지막으로 테스트까지 해보는 구조화된 루틴을 제공하고 있다.

문제의 제한사항은 매우매우 중요한 조건이지만 문제 풀이자들이 가끔 놓치는 경우가 많다. 특히 Integer의 범위 조건이나 정렬의 유무 등은 문제 풀이를 진행함에 있어서 매우 치명적으로 작용하는 경우가 있기 때문에 항상 미리 잘 정리 후 문제 풀이를 하는 것이 중요하다. 책에서는 해당 부분을 가장 먼저 진행하고 아이디어 도출을 시작한다

예제의 문제는 브루트 포스하게 푸는 아이디어로 충분히 해결가능하므로 다른 아이디어는 없지만 같은 문제라도 여러 가지 접근 방법이 가능할 수 있기 때문에 시간/공간 복잡도를 고려하여 사전에 문제 풀이를 설계하는 과정을 거치게된다

문제 풀이 설계 이후 그 때서야 비로소 코드를 작성한다. 코드는 사실 아이디어를 그저 옮기는 것이므로 앞에서 고민과 생각을 많이하고나면 크게 어렵지 않게 옮길 수 있을 것이다 (물론 코드 작성을 위한 언어의 문법 기본을 알고 있어야한다)

마지막으로 엣지 케이스를 놓치는 지 아닌 지에 대해서 테스트 케이스를 검토하며 루틴을 마치게된다.

우선 책이 그렇게 두껍지 않다. 자료구조/알고리즘 개론서는 두꺼운 경우가 많아 부담스러울 때가 있는데 그런 부분을 덜었다고 본다. 두껍지는 않지만 빈출되는 내용은 거의다 커버하고 있다. 특히 각 유형별로 비슷한 유형의 리트코드 등의 문제풀이 사이트들도 제공하므로 충분한 연습을 할 수 있을 것이다. 급하게 코딩 테스트나 이직 준비를 하는 사람들에게 간지러운 부분을 해결해줄 수 있는 책이라고 생각한다. 

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

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

알고리즘은 영원히 내가 풀 수 없는 숙제 중 하나다. 그래서 입사 후 조금씩 알고리즘 공부를 하고 있다. 그런데 알고리즘에서 가장 유명한 책은 자바로 되어 있어서 참고할 수 없었다. 또한 재귀부터 시작되서 초반에 진입하는데 어려움이 있었다.

다행히도 이 책은 파이썬으로 되어 있었고, 난이도가 쉽게 되어 있어서 처음 알고리즘을 진입하기에는 쉬웠다. 풀어야하는 문제는 어떻게 접근하면 되는지, 시간 복잡도가 어떻게 되는지 가르쳐주고, 대부분의 문제가 도식화 되어 있어서 다른 문제에 응용할 수 있게 해주었다. 각 상황 단계별로 접근하면서 알고리즘 문제를 해결하면 응용할 수 있는 방법이 따로 생겼다.

처음 문제만 보고 풀 때는 시간이 엄청 걸렸었다. 하지만 접근 방법을 고려하면서 따라 풀다보니까, 시간이 단축되는 것을 느꼈다. 연습을 하다보니 차차 알고리즘이 재밌어지는 것을 느꼈다.

혹시 알고리즘을 처음 공부하는 사람, 파이썬을 공부하는 사람에게는 추천을 한다.

KakaoTalk_20210523_204658718.jpg

 

KakaoTalk_20210523_204659928.jpg

 

KakaoTalk_20210523_204659649.jpg

 

KakaoTalk_20210523_204659333.jpg

 

KakaoTalk_20210523_204659025.jpg

#한빛미디어 #나는리뷰어다 #쓰면서익히는알고리즘과자료구조 #윤대석

 

 

제목에서 느껴지듯이 알고리즘과 자료구조 프로그래밍을 쓰면서 익히는 과정을 거치는 것이 다른 알고리즘 서적과는 차별점이 있는 서적이다.

요즘 여러 회사들은 개발자를 채용할 때 알고리즘과 자료구조를 기본적으로 평가하기 위해서 코딩 인터뷰를 많이 시행하고 있다고 한다.

코딩 인터뷰를 하다보면 다양한 개발환경일 경우가 많거나 종이에 코드를 작성해서 문제를 해결해야 하는 경우가 많기에 문제만 잘 푼다고 좋은 평가를 받는 것도 아니라고 한다.

이런 코딩 인터뷰를 대비하기 위해서 지은이가 제안한 것이 노트 레이아웃를 이용하여 사고하는 과정을 적어보고 비주얼라이저를 활요해 중간 단계를 눈으로 확인하며 구현 과정의 도식화로 이해를 도는 과정이다.

어느 알고리즘 서적에도 나와 있지 않는 제대로된 알고리즘과 자료구조를 내 손에 익히게 하고, 내 머리에 익히게 하는 과정이라고 생각이 듣다.

복잡도까지 생각하며 내가 작성한 알고리즘을 평가해보지 않는데 복잡도 계산도 해보며 최적화된 코드를 짜려고 노력하게 하는 제대로 공부시키는 서적인거 같다.

이 책을 한권만 다 마스터한다면 코드를 짜기전에 제대로된 자료구조를 이용한 알고리즘을 짜게 하는 과정을 연습하게 되여 프로그램을 짜는 속도도 완성도도 높아질거라 생각이 듣다.

알고리즘과 자료구조에서 필요한 배열부터 시작하며 문자열, 연결 리스트, 스택, 재귀, 큐, 트리, 동적 프로그래밍 핵심적으로 꼭 배워야 할 부분만 자세히 나온 서적이므로 이 책만 다 끝내고 코딩 테스트를 연습 문제를 더 풀어 본다면 최상의 공부가 되지 않을까 싶다.

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

요즘 들어 IT 기업에 취업할 때나, 이직할 때나 코딩인터뷰는 필수적으로 진행되는 것 같습니다.

사실 취업을 한 이후 알고리즘과 자료구조 쪽에 크게 신경을 못 쓰고 있었는데요.

이직을 아예 떼 놓고 생각하기 어려운 직종에 몸 담고 있기 때문에, 늘 마음 한 켠에 해야 한다는 의무감만 자리하고 있던 것 같습니다.

그러던 차에 알고리즘과 자료구조에 대한 책이 서평 대상에 있어 고민 없이 신청하게 되었습니다.

이 책은 순수한 자료구조와 알고리즘에 대한 배경지식 보다는, 코딩 테스트에 조금 더 초점을 맞추고 있습니다.

코딩 테스트를 준비하는 데 있어 고민해야 하는, 문제 풀이 자체가 아닌 다른 부분들

(예를 들어 변수명이나 테스트 케이스 등등)에 대한 내용도 포함하고 있습니다.

그래서 자료구조나 알고리즘 자체에 대한 지식을 얻고자하는 분들보다는, 코딩 테스트를 앞두고 이와 관련된 기초 지식과 스킬들을 같이 익히고 싶은 분들에게 더 적합할 것 같습니다!

이와 관련해, 책의 머리말 중에서도 코딩 인터뷰를 대비하는 과정에서 좀 더 유의 깊게 인지해야 할 점을 다음과 같이 정리하고 있습니다.

- 문제 분석과 함께 어떤 알고리즘과 자료구조가 적절한지 확인한다.

- 문제로부터 요구사항과 제한사항을 수집한다.

- 어떤 식으로 접근할지 다양한 아이디어를 제시한다.

- 코딩을 통합개발환경(IDE) 도움 없이 화이트 보드나 종이에 연습한다.

- 시간/공간 복잡도를 고려한다.

- 어떤 테스트 케이스를 통과하는지에 대해 고려한다.

 

 

책 내에서는 알고리즘 설계 캔버스라고 불리는 레이아웃을 사용합니다.

문제 해결 과정에서 실수할 수 있는 부분을 줄이는 데 도움을 주는 레이아웃인 것 같습니다.

문제의 제한사항이나 요구사항을 잘못 인지하거나, 고려하지 못한 테스트 케이스를 잡아내는 등 실수를 줄이기 위해 꽤 유용할 것으로 보입니다.

 

이 구성 자체도 알고리즘을 제대로 파 본 적이 없는 저에게는 새롭게 느껴졌는데요.

이 책은 자료구조와 알고리즘을 분류하고, 각 자료구조와 알고리즘에 해당하는 위 캔버스에 맞추어 문제들을 분석한 뒤, 파이썬 언어를 통해 문제를 해결하고 있습니다.

늘 해야지, 해야지 마음만 먹고 있었던 알고리즘 공부를 다시 시작하게 된 계기가 된 것 같습니다.

지금까지는 무턱대고 leetcode 사이트부터 들어가서 꾸역꾸역 하나씩 풀어나가는 데 의미를 두다가, 

결국 재미를 붙이지 못하고 중간에 포기하기 일쑤였는데요.

​책을 통해 자료구조와 알고리즘에 관한 전반적인 배경들을 먼저 쌓아나간 뒤에,

쌓은 기초를 바탕으로 혼자 문제를 풀어나가며 조금이라도 알고리즘 문제 풀이에 재미를 느끼게 되었으면 좋겠습니다!

IT기업의 개발자로 취업을 하려면 통과해야하는 관문 중 하나가 바로 코딩테스트 이다. 

주로 코딩테스트는 자료구조, 알고리즘에 대한 기본적인 이해를 평가하기 위한 지표로 사용된다.

그만큼 알고리즘과 자료구조가 중요하다는 의미인데, 과거의 나를 떠올려보면 부끄럽게도 코딩하면서 알고리즘을 생각해본적은 없었다. 그러던 중 취업을 위해 채용공고들을 찾아보던 중 대부분의 회사에서 코딩테스트를 채용 과정의 일부로 사용하고 있다는 것을 알게되었다. 부랴부랴 자료구조 강의를 결제해서 듣기 시작했지만, 단순히 취업을 위한 공부라 재밌지도 않았고 강의는 들어놓고 문제에 손도 못대는 경우가 허다했다. 

 

이렇게 어려운 알고리즘 공부는 대체 왜 해야하며 어떻게 해야 효과적일까??!!!!

 

매일 문제를 풀면서 들었던 이 질문에 대한 해답을 주는 책을 소개한다.

 

 

두둥!

 

실제 개발자로 취업을 하게되면 현실세계의 문제들을 해결해야한다. 이럴때 알고리즘에 대한 기본 지식은 빛을 발하는데, 현실 문제에 대한 대략적인 접근방법뿐만 아니라 어떤 알고리즘과 어떤 자료구조를 사용해야할지 고민하게 되는 습관도 기를 수 있으며 동료의 코드를 리뷰해줄 때 더 좋은 제안을 할 수 있다는 것이다.

 

즉, 알고리즘에 대한 공부는 현실 문제들을 잘 헤쳐나갈 수 있는 방법을 찾게 해주는 열쇠같은 것이다. 

운동으로 따지자면 모든 운동의 기초가 되는 근력운동이고, 요리로 따지자면 요리를 하려면 불을 다룰 줄 알아야하고 칼질을 할 수 있어야하는 것처럼 말이다.

(올바른 비유인지는 모르겠음..)

 

 

 

나는 자료구조와 알고리즘에 대한 강의도 수강해보고 책도 사서 읽어보고 했는데 이 책은 조금 색다른 방법으로 진행이 된다. 바로 노트 레이아웃을 이용한 문제풀이 접근 방법이다. 책 제목처럼 이 책은 직접 알고리즘 설계 캔버스(Algorithm Design Canvas)를 채워가면서 문제를 해결해나간다.

 

 

알고리즘 설계 캔버스의 구조 

 

나는 이방법이 굉장히 마음에 들었다. 코딩테스트를 보다보면 이 문제에 어떤 알고리즘을 써야하는지 아이디어가 떠오르지 않아 난감했던 적이 많았는데 이렇게 손으로 적어두면 한 눈에 볼 수 있으니까 너무 좋다고 생각했다. 또  코드를 짜다가 '내가 지금 이걸 왜하고 있었더라?' 싶어서 다시 처음으로 돌아가지 않아도 되니까 시간낭비를 줄일 수 있었다.

 

 

 

책의 순서는 배열 / 문자열 / 연결리스트 / 스택과 재귀 / 큐 / 트리 / 동적 프로그래밍 / 정렬 순으로 이루어져 있다.

가장 중요한 자료구조들을 제대로 공부할 수 있다.

 

 

 

책의 구성은 일단 자료구조에 대한 기본적인 개념을 설명해준다. 스택이면 스택, 배열이면 배열에 대한 전반적인 지식을 소개해준다. 그림도 있어서 이해하기 쉽다. 파이썬을 다룰 줄 알지만 자료구조를 잘 모르는 사람들도 이해할 수 있도록 개념 설명이 매우 자세하다고 느꼈다.

 

 

 

기본적인 개념설명 이후 직접 파이썬으로 구현을 해본다.

이 책은 파이썬으로 진행되는 언어이므로 모든 자료구조들은 파이썬으로 구현된다.

구현 후 알고리즘 설계 캔버스 예시도 같이 보여준다. 

 

 

 

코드에 대한 자세한 설명이 필요한 경우, 코드를 한 줄 한 줄 뜯어서 어떤 값이 리턴되는지, 어떻게 값들이 바뀌는지 알려준다. 코드에 대한 설명도 꽤 자세한 편이다. 설명과는 논외로 어려운 개념은 아무리 쉽게 설명해줘도 어렵다;;

 

 

 

자료구조에 대한 구현까지 끝나면 연습문제가 3-4개 정도 주어진다. 문제를 풀면서 개념을 소화하라는 차원에서 문제가 주어지는데 나의 경우 아직 알고리즘 초심자라 그런지 문제를 푸는데 오랜 시간이 걸렸다.

 

 

책으로 공부해보면서 알고리즘을 막 시작한 나에게 부담스럽거나 난이도가 너무 높지 않았다.

언어가 파이썬이라 익숙하기도 했고, 알고리즘 설계 캔버스로 구현해보니까 기억도 잘나고 복습하기에도 용이했다.

책의 두께도 385페이지로 별로 두껍지 않고 들고다니는데 무리가 없다.!

이 책으로 공부하고 알고리즘 사이트에서 문제 풀어보면서 코딩테스트 준비하면 지금보다 자신감이 좀 생기지 않을까 싶다. 

오랜만에 정말 괜찮은 책을 찾은 것 같아서 기분이 좋다 :) 

 

 

책에 대한 전체적인 나의 평을 요약해보면 

1. 알고리즘, 자료구조를 처음 배운다. -> 산다.

2. 알고리즘, 자료구조를 제대로 배우고 싶다. -> 산다.

3. 알고리즘, 자료구조를 이미 알고있고, 코테 합격을 바라보고 있다. -> 안산다. 

4. 파이썬 배운지 얼마 안됐다. -> 안산다. 

 

 

 

 

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



 

<쓰면서 익히는 알고리즘과 자료구조>, 윤대석 지음, 한빛미디어, 2021

 

 

<쓰면서 익히는 알고리즘과 자료구조>는 배열(Array), 문자열(String),연결 리스트(Linked List), 스택(Stack)과재귀(Recursion), (Queue), 트리(Tree), 동적 프로그래밍(Dynamic Programming)과같은 다양한 자료구조와 알고리즘을 설명하고 노트 레이아웃 접근법으로 알고리즘 문제를 소개하고 풀이한다. 저자는알고리즘 문제 해결을 위해 가장 최적화된 해결책을 바로 제시하지 않고, 다양한 접근법을 고민해 보고 차근차근 단계별로 풀이하는 과정을담았다고 한다.

 

 

저자는 소프트웨어 개발자로서 알고리즘의 출력값에 관심을 가졌을 뿐 어떻게 출력값을 만드는지 관심을 갖지않았다고 한다. 구글, 아마존, 페이스북 등 ‘IT업계 네임드 회사에서 코딩 인터뷰를 한다는 것을 알고 알고리즘에 관심을 가졌고, 독학으로알고리즘 문제 풀이한 과정을 담아 이 책을 펴냈다고 한다.

 

 

알고리즘과 자료구조 학습을 통해 시간 복잡도공간 복잡도를 파악할수 있고, 어떤 개발을 하든 운영되는 프로그램의 자원을 효율적으로 활용하고 다양하고 빠른 해결방법을고민할 수 있다고 강조한다.

 

 

개발과정에서 현실적인 문제 해결을 위해 어떤 자료구조와 알고리즘을 써야 하는지고민하게 되는 좋은 습관이 생겼고, 다른 개발자들의 코드를 리뷰하는 과정에서 좋은 제안도 할 수 있는계기가 되었다.(8)

 

 

알고리즘에 대해 공부하고 싶은데 어디서부터 어떻게 시작해야 할지 모르겠거나, 코딩 인터뷰를 준비하고 있는 분들에게는 실질적인 도움을 줄 수 있을 것 같다.

 

 

* 해당 도서는 출판사로부터 무상으로 제공받았으며, 제 주관에 따라 솔직하게 작성했습니다.


 

1.jpg

 

요새 나오는 알고리즘 관련 서적들과 마찬가지로 '쓰면서 익히는 알고리즘과 자료구조'도

파이썬 코드로 예제가 제공됩니다. 파이썬의 기본적인 설치나 사용방법에 대해서는 기술하지 않기 때문에

파이썬을 조금 알고 있으신 분이 보시면 더 좋을꺼 같습니다.

 

물론 파이썬을 몰라도 함수명이나 코드들이 직관적이기 때문에 이해를 하기는 어렵지 않습니다. 

저는 책을 보면서 자바스크립트로 코드를 짜보면서 해보고 있는데, 파이썬에서 간단하게 되는 코드를

자바스크립트로는 구현을 하거나 코드가 길어지는게 좀 아쉬울 뿐이였습니다.

 

그리고 모든 책에서 그렇듯이 아래와 같이 필요한 모든 자료구조와 예제들을 소개하고 있는데, 

 

■ 목차

1. 배열(Array)

2. 문자열(String)

3. 연결리스트(Linked List)

4. 스택(Stack)과 재귀(Recursion)

5. 큐(Queue)

6. 트리(Tree)

7. 동적 프로그래밍(Dynamic Programming)

8. 정렬(Sort) 알고리즘

 

 

다른 책과 다른 점은 '아이디어'라는 부분인데, 어떻게 문제 풀이를 접근 해야되는지 도출하는 방법이 나와 있습니다.

막상 코드를 외우서 문제를 풀려고 하면, 기본 알고리즘 코드가 기억이 잘 나지 않던가 또는 응용할 때 어려움을 겪는데 

이런식으로 문제 해결 습관을 길르면 많은 도움이 될 것 같습니다.

 

2.jpg

 

그리고 같은 문제를 여러가지 방법으로 푸는 방법이 나오면서 시간/공간복잡도에 대해서 정의가 되어 있고, 

차근 차근 읽어보면 어떤 방법으로 푸는 방법이 있는지 그리고 여러가지 방법으로 사고를 하는데 도움이 되었던 것 같습니다.

 

알고리즘을 코드보다 사고능력을 키우고 싶으신 분들이라면 추천드릴 책입니다.

 

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

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

 

'쓰면서 익히는 알고리즘과 자료구조'

우선 일반적인 알고리즘과 자료구조에 대해서 파이썬으로 다루는 책이다.

그런데, 다른 알고리즘책과 다른 점은 알고리즘 자체의 공부 보다는 문제의 해결 방법에 촛점이 맞춰져 있다.

그래서, 코딩 테스트를 준비하는 사람에게는 도움이 될 수 있을 것 같다.

특히, 코딩 테스트 페이지에서 문제만 보고 아무래도 못 풀겠는데,

답을 알려주는 사람도 없을 때 이 책이 답안 해설서 역할이 되어 줄 수 있을 것 같다.

 

책을 보면서 조금 당황했던 것은 문제와 해설이 너무 연결되어 있어서,

수학 문제집 보다는 뒤에 붙어 있는 답지와 같으 느낌이었다.

문제를 풀어보기도 전에 해설을 먼저 보는 느낌.

 

주어진 문제, '관련 문제 사이트'에 나와있는 문제를 먼저 도전해보고

책을 읽어 가는게 좋지 않을까 생각한다.

쓰면서 익히는 알고리즘과 자료구조

 

바야흐로 개발자의 시대이다.

올 한해는 개발자의 전체적인 평균 임금이 상당히 올라갈 수 있었던 한해였고

그에 따라서 많은 개발자들이 이직을 시도하고 있는 것 같다.

이직의 기본 베이스는 본인의 담당 업무 관련 지식과 컴퓨터과학의 기초적인 지식 베이스이다.

 

나도 한번 이직을 시도해보자 하여 이 책을 선택하게 되었다.

 


 

알고리즘 문제 해결 전략

 

[##_Image|kage@wekKI/btq5vemspv1/eqa3CzKN1t1uIkJjWfkqGk/img.jpg|alignCenter|width="886" data-origin-width="936" data-origin-height="1248" data-ke-mobilestyle="widthOrigin"|||_##][##_Image|kage@bFahb7/btq5wvnEDQx/6tn50HaZ5kqG3V2EnspwLk/img.jpg|alignCenter|width="886" data-origin-width="936" data-origin-height="1248" data-ke-mobilestyle="widthOrigin"|||_##]

한빛미디어 출판사에서 출판중인 "쓰면서 익히는 알고리즘과 자료구조" 이라는 책이다.

알고리즘 설계 캔버스 라는것이 인상적이어서 선택하게 되었다.

 

항상 실패하는 영역이라고 하면

알고리즘과 자료구조를 공부하고 그것을 문제와 연관시키는 부분에서 실패하고는 하는데

이 책은 학습자들이 어디서 실패하는지를 잘 파악하고 있는 듯 하다.

 

캔버스라는 도구를 통해서 문제를 구체화시키고, 어떤식으로 분석하고

내 코드를 어떻게 테스트 하는지를 규격화 하여 풀 수 있게 도와준다.

 

단시간에 어느정도 실력을 키우고 싶은 사람이라면 한번 이 방식대로 문제를

분석하고, 풀어보는 것은 어떨까?

 

알고리즘과 자료구조를 제대로 시작해보고 싶다면

이 책도 함께 읽어보는건 어떨까?

 


 

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

 

책의 특징
알고리즘 설계 컨버스를 활용했다.
이 부분이 이 책이 다른 자료구조, 알고리즘 입문서에 비해 가장 도드라진 특징이라 볼 수 있다. 입문자들에게는 책에 담겨 있는 대부분의 내용이 새롭기 때문에 당장 코드를 작성하는 것에만 초점이 맞춰지는 일이 흔하다. 쓰면서 익히지 못하고 쓰기만 하게 되고, 개념을 익히는 것은 별개의 문제처럼 여겨지게 된다. 어떻게 접근할 것인지를 알고리즘 설계 컨버스를 이용해 먼저 생각해보는 시간을 갖게 해준다.
 
 
 
친절한 그림
아이디어 캔버스와 같은 맥락에서, 친절한 그림덕에 입문자들이 더 쉽게 이해할 수 있도록 했다.
이 책은 그림 하나만 두고 단계별 설명을 글로 길게 설명하지 않고, 그에 맞는 그림을 단계별로 배치하면서 이해도를 높인다. 이러한 친절함은 연결 리스트뿐만 아니라 다른 자료구조, 알고리즘에서도 볼 수 있어 입문자가 쉽게 이해할 수 있도록 해준다.
 
 
 
총평
책에서 알고리즘과 자료구조에 대해 직접 문제를 풀며 익숙해지게끔 했다.
입문자를 위해 많은 도표를 활용해서 그림을 통해 이해하기 쉽게 설명했다.
파이썬으로 입문자가 알고리즘 아이디어를 자연어에 가깝게 표현할 수 있도록 했다.
자료구조에 사전 지식이 있으면, 책의 난이도가 너무 쉽게 느껴질 수 있다.(알고리즘 파트도 마찬가지다.)
 

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

> 진행에 앞서

알고리즘 관련된 책을 몇 권 보았지만, 근래에 들어서는 오랫만에 접해보았다.

개인적으로는 다른 것들에 관심을 가지면서, 알고리즘은 많이 접하지 않았던터라, 많이 부족하다고 느끼고 있었기 때문에, 이 주제가 눈에 들어온 것 같다.

 

> 책에 대한 간단한 정보

제목처럼 알고리즘에 대한 책이다.

특히 순수한 자료구조를 중심으로 한 알고리즘 문제 해결에 대한 책이다.

코딩테스트를 비롯하여 다양한 사이트에 코딩관련 문제들이 많지만, 이 책은 컴퓨터공학을 전공한 사람이라면 알고있을 자료구조에 대한 내용을 다루고 있으며, 이것을 다시 상기시킴과 동시에 직접 구현하여 피부로 와 닿도록 도와주는 데 목적이 있다. 특히 구현에만 초점을 맞추었다기 보다는 그 풀이 과정 자체를 잘 설명해놓았다.

그리고, 알고리즘은 파이썬3를 통해 구현하였다.



> 인상깊은 부분들

알고리즘 설계 캔버스 중심으로 설명

당연히 여러 요소가 있었지만, 알고리즘 설계 캔버스를 중심으로 그 요소를 설명하고 있다는 것이 특징이었다.

마치, 우등생의 비법 노트를 보는 느낌이랄까.

그 비법 노트를 작성하는 방법 뿐 아니라, 그 과정에서 풀이 과정을 같이 학습해나가는 느낌마저 들게 하였다.


관련 문제 사이트 제공

관련 문제를 그냥 풀어볼 수도 있지만, 그 문제를 제공하는 사이트를 직접 적어주어 풀어보기 쉽도록 하였다.

그래서, 해당 사이트에서 다른 언어로 문제를 풀어보는 것도 어렵지 않았다.

사이트에서는 다른 언어라고 하더라도 직접 실행 가능할 뿐 아니라, 오답까지 잘 체크해주기 때문이다.


문제를 직접 해결해보니, 정말 좋은 참조를 넣어놓았다는 생각이 더 강하게 들었다.


leetcode를 통해 문제를 해결해 본 결과

 

도표를 적극 활용하여 설명

문제 해결방법에 대해 설명하는 부분에서는 도표를 매번 출연시켜서 설명하고 있다.

대학 때 알고리즘에 대한 이해를 돕기위해 칠판에서 자주 보았던 방식인데, 이러한 방식을 통해 스텝바이스텝으로 알고리즘에 대한 이해가 쉽게 되도록 도와주었다.


알고리즘 설계 캔버스를 내세운 뒷표지

이 책의 핵심인 알고리즘 설계 캔버스를 중심으로 뒷 표지를 내세웠다. 책을 읽을수록 이유가 와 닿는 부분이다.


 

> 괜찮은 부분

1. 단계별로 문제해결을 설명하였다.

가장 먼저 문제 기술 및 설명을 하고 있다. 그리고나서 노트를 활용하여 문제 접근 및 풀이를 제공하며, 제한 사항 및 아이디어를 기록하고, 그것을 코드로 풀어내고 있다. 이러한 일련의 과정을 따라가다보면 당연히 문제해결은 이렇게 하는 방식이 좋다고 여겨지고, 이 방식대로 훈련하게 된다. 이 방식에도 동의하는 바이기 때문에 충분히 좋았던 부분이다.

2. 해당 문제를 비슷하게 제공하는 사이트를 알려줌으로 인해 직접 풀어볼 수 있는 기회를 제공한다.

한가지 사이트 뿐 아니라 다양한 사이트에 대한 참조를 링크로 제공함으로, 직접 실습하는 데 도움을 주었다. 아니었다면, 그냥 머릿속으로 이해만 하고 넘어갔을 문제들을 직접 풀 수 있도록 도전해보도록 했다는 것이다. 개인적으로도 leetcode를 이용하여 문제를 풀어보았는데, 여기서 말하는 풀이를 볼 때도 있었지만, 먼저 문제를 풀어보고 이 해설을 보았을때 더 와 닿았던 부분이다.

3. 배열, 문자열, 연결리스트, 스택, 재귀 등 필수 주제를 다뤄주었다.

너무 뻔한 주제들이고, 요즘에는 API로 제공되기 때문에 아마도 개발자들이라면 직접 구현할 일이 없는 알고리즘일지도 모른다. 그래서 오히려 개념은 알고있지만, 직접 구현하라고 하면 구현하기는 어려울 수 있는 주제들인데, 이에대한 이해를 높이기 위해서는 구현하는 방법을 알고있어야 한다고 생각한다. 그런 관점에서 이러한 개념을 활용한 문제를 다룬것이 좋았으며, 순수한 구현 뿐 아니라, 응용 문제를 다룸으로써 실용적이기까지 하다.

4. 그림/도표를 적절히 삽입하여 이해를 돕고 있다.

그림/도표를 필요하다고 생각되는 곳 마다 잘 삽입하였다. 배열의 구조를 다룰 때에도 몇 번째 배열에 어떤 값이 들어갔으며, 해당 루프를 수행할 때마다 어떤 변화가 일어나는지도 알려주고 있다. IP주소에 관한 문제에 대해서 다룰 땐, 각 주소 값의 범위를 기재한 부분도 있었다. 이렇듯 이해를 도울 수 있도록 최대한 그림/도표를 적절히 활용한 부분이 인상적이었다.


> 아쉬운 부분

1. 실제로 문제를 풀어볼 수 있는 참고 사이트를 나중에 보여주어 아쉽다.

스텝바이스텝으로 문제 해결을 해나가도록 돕고 있다고 하였는데, 참고 사이트는 마지막에 언급되어있다. 이 문제를 스스로 풀어보고 그 다음에 설명을 들으면 좀 더 강하게 와 닿는다고 생각되는 측면에서는 순서가 굳이 뒤에 있었어야만 했나 하는 생각이 들었다. 계속 뒤부터 확인하느라 아쉬웠다.


2. 이해를 돕기 위한 서술이 많은 편인데, 단락을 적절히 끊어주면 가독성이 올라갈 것 같다.

도표를 많이 삽입했으나, 특성상 서술하는 부분도 많았다. 그래서 어떤 부분은 10줄이 넘도록 설명이 이어지는 단락도 존재한다. 그래서 이렇게 말이 길어지는 경우 적절하게 단락이나 항목을 끊어서 알려준다면, 가독성이 올라가고 이해도 쉽게 할 수 있지 않았을까 생각되었다.


3. 알고리즘 설계 캔버스에서 테스트 칸은 사용하지 않았다.

알고리즘 설계 캔버스라는 테이블은 이 책에서 가장 핵심적인 노트를 표현하는 부분이다. 이 부분에 각각의 칸이 다른 역할을 보여주고 있는데, 이 중 테스트 칸은 별도로 기록에 사용된 것을 보지는 못했다. 그렇다면 굳이 필요한가 생각이 들고, 필요하다면 활용하는 부분도 같이 보여주어야 납득할 수 있을 것 같다. 


 

> 개인적인 평점

- 가격: 7 / 10

- 내용: 8 / 10

- 디자인: 8 / 10

- 구성: 8 / 10

 

> 정보

저자: 윤대석

출판사: 한빛미디어

가격: 26,000원

전체 페이지: 387페이지

 

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

대학교때 여러가지 사정(학교의 사정과 개인적 스케쥴)이 겹치면서

알고리즘은 강의 자체를 못들었고, 자료구조는 독학했던 기억이 떠오릅니다.

 

쓰익알자_00.jpg

 

이 책은 기본적으로 "파이썬"으로 진행되지만,

다른 언어를 배우셨다면 다른 언어로 연습하는 것도 가능합니다.

하지만 저는 책을 볼 때, 실습도 언어를 쓰는 것을 좋아하기 때문에

파이썬을 모르신다면 이 책을 읽기 전에 "혼자 공부하는 파이썬"을 공부하는 것을 추천드립니다.

 

저자는 알고리즘 설계 캔버스라는 레이아웃을 활용해서

문제를 해결하는 방법을 제시하고 있습니다.

 

쓰익알자_01.jpg

 

알고리즘 캔버스는 Constraints, Ideas, Complexities, Code, Tests 영억으로 나눠져있습니다.

 

알고리즘 설계 캔버스를 활용하면 

제한사항이나 고려하지 못한 테스트 케이스등을 미리 적을 수 있어

문제 해결과정에서 실수할 수 있는 부분을 줄일 수 있다고 합니다.

 

쓰익알자_03_.jpg

 

 

책은 설명과 코드와 그림을 적절하게 잘 배치해서 독학하는 사람이 학습하기 좋게 구성되어있습니다.

보통 전공을 공부할 때 기억을 더듬어 보면 

딱 단계별 그림만 있고, 세부적인 부분은 글에서 설명을 해주어서

왜 저게 저렇게 넘어가지?하는 부분들이 가끔 있는데, 그림에 직접 설명이 상세하게 그려져있는 부분들이 많아

더 쉽고 빠르게 이해할 수 있어서 좋았습니다.

 

 

또한 하나의 문제에 하나의 풀이방법만이 아니라

다양한 방식의 접근법을 알려주기 때문에 조금 더 다양하게 사고를 할 수 있는 능력을 기르게 해주는 것 같습니다.

언어 공부는 조금 해봤지만 알고리즘과 자료구조를 독학하고 싶은 분들에게 좋은 책인것 같습니다.

코딩테스트와 연계해서 이 책 다음으로는 "이것이 취업을 위한 코딩 테스트다 with 파이썬"를 공부한다면 좋을 것 같습니다.

 

 

이 책은 한빛미디어 도서 서평단 "나는 리뷰어다 2021" 활동을 통해 제공 받았습니다.

 

 


<사담>

알고리즘과 자료구조에 대한 기본기가 부족해서 이 책을 받았다. 

사실 집에 Do it 시리즈의 알고리즘 학습 책이 있는데도, 그것과 같은 부류인 이 책을 제공받기로 선택했다. 내가 워낙 기본기가 없어서 선택할 수 있는 책이 한정적이다... ㅜㅡㅜ

 

사실 알고리즘 학습을 거의 멈췄다. 시간을 많이 투자해야 맞는데, 멈췄다. (반성타임)

학습을 미루고 미루다보니 지금은 '여름방학에 빡세게 하지 뭐>_<' 하는 핑계가 크다.

사실 지금 또 기말고사 시즌이라 학습할 타이밍은 아니고.. 정말 종강 하자마자 알차게 준비하려 계획한다.


 

곧 여름방학이니까 일단 지금은 책을 프리뷰하려고 한다.

마침 다른 알고리즘+자료구조 학습 책이 있으니 어떤 부분에 차이점이 있는지 두 책을 비교해볼 것이다. 

 

 

 

 

 

'쓰면서 익히는 알고리즘과 자료구조'에 대한 서평을 다른 책과 비교하여 작성해보도록 하겠다.

책을 구매할 때에도 여러 책을 비교하며 사는 것처럼 말이다.

 

 

ㅡ먼저 알려드리는 결론:

 

책을 구매하고자 이런 서평을 읽는 분들이 계실텐데, 도서 선택에 도움이 될 만한 정보를 드리겠다. 

"일단 갓 입문하는 사람이 아니고 알고리즘, 자료구조를 접해본 사람이라면 둘 중 취향에 맞는 것을 선택해도 되겠으나, 많은 용어 자체가 생소한 입문자는 닥 Do it을 선택"

  왜냐하면, 예를 들어서 '배열'이라는 전체적인 개념을 설명할 때, '쓰익알자'는 단 6줄과 도해 하나로 간단히 언급하고 넘어가는 반면, Do it에서는 일단 '배열'을 모르고 있다는 전제 하에 마치 선생님처럼 차근차근 설명하고 있다. 그 과정에서 깔끔한 예시와 단계적 설명을 보인다. 이처럼 '배열'이라는 전체적인 개념을 먼저 이해시키고 가려고 노력하는 책이 Do it이다.

  그러니까 정말 용어가 생소한 초보, 입문자가 아니라면 취향껏 골라도 될 것 같다. 다만, 쓰면서 익히는 알고리즘과 자료구조가 조금 더 깊은 정보가 담겨 있다. 

  

두 책의 예상 독자는 분명히 다르다.

비교 대상이 아니라고 생각하면서도 비교하는 이유는, 서로 다른 책 스타일을 보여드리기 위함이다. 

그리고 두 책의 예상 독자가 다르다고 해도, 나는 두 책과 인터넷의 도큐먼트 등을 모두 참고하며 공부할 것이다.

 


1. 권장하고 있는 학습방향의 차이 (책의 구성)

책의 구성이 확연히 다르다. 이 부분에서 '쓰면서 익히는 알고리즘과 자료구조'가 새롭게 느껴졌다. 그럼 두 책의 구성을 작성해보겠다. 

 

- 쓰면서 익히는 알고리즘과 자료구조: '노트 레이아웃'

이 책에서는 '노트 레이아웃'을 사용하기를 권장하는데, 대략적 구조는 다음과 같다. 

제한사항, 범위 등 유의사항 코드 작성
아이디어, 복잡도 등 접근방법
테스트 케이스 검토

 

위와 같이 문제사항을 검토하고 충분히 생각한 뒤에 설계한 아이디어에 따라서 코드를 작성하게 된다. 충분히 고민하고 코드를 작성하도록 유도하는 것이 매력적이었다. 

 

  솔직히 나는 이러한 방식이 낯설면서도 마음에 들었다. 사실 혼자 공부하면서 충분히 고민해보는 것, 문제를 풀기 전에 방향을 꼼꼼히 설계해 보는 것이 은근히 어렵다. 가끔 진도 나가기에 급급해질 때가 있는데, 그럴 때는 설렁설렁 지나치게 되는 부분이 많다. 하지만 쓰익알자는 그런 위험을 방지하는 책의 구성이다. 그래서 나는 쓰익알자의 방식이 굉장히 마음에 들었다.  

 

 

- Do it! 자료구조: '실습 예제 -> 연습 문제 -> 보충 수업'

실습 예제로 기반을 탄탄히 다질 수 있고, 그 후 연습문제로 더욱 단단히 만들 수 있다. 또한 보충수업에서는 그와 관련된 개념을 학습한다.

이러한 학습 패턴은 코딩 연습 뿐만 아니라 여러 분야에서도 널리 쓰이는 방법이다. 그만큼 습득하기 좋고, 빠른 이해를 돕고 효율적이다. Do it 알고리즘+자료구조에서도 직접 손으로 코딩하기, 따라하며 습득하기를 강조한다. 일단 문제 수 자체가 많아서 정말 책에 있는 예제, 문제를 차근차근 성실히 밟아간다면 실력 향상은 보장될 것 같은 느낌.

 


2. 목차의 차이

 

처음 두 책을 비교하자고 마음먹었을 때, 핵심적인 알고리즘을 익히는 거니까 뭐 목차는 비슷비슷할 거라고 생각했다. 그러나 꽤 달라서 조금 흠칫했다..

 

일단 아래는 큰 목차이다. 쓰익알자의 큰 장은 7개로, Do it이 11개인 것보다는 수는 더 적다. 하지만 내용 자체는 결코 심플하지 않다. 책에 따라 덜 배우고 더 배우고의 걱정은 안해도 될 것 같다. 

 

쓰면서 익히는 알고리즘과 자료구조

1. 배열
2. 문자열
3. 연결 리스트
4. 스택과 재귀
5. 큐
6. 트리
7. 동적 프로그래밍
8. 정렬 알고리즘
+ 부록
A 알고리즘 문제 제공 사이트
B 알고리즘 연습을 위한 노트 방법
C 파이썬을 이용한 문제 풀이
D 알고리즘 학습을 위한 사이트 소개

 

 

Do it 알고리즘+자료구조

1. 기본 알고리즘
2. 기본 자료구조
3. 검색
4. 스택과 큐
5. 재귀 알고리즘
6. 정렬
7. 집합
8. 문자열 검색
9. 리스트
10. 트리

11. 해시 


 

아래 사진을 보면 각 도서의 목차 구성의 느낌이 올 것이다. 

 

위: 쓰익알자 / 아래: Do it

 


3. 지은이

항상 서평을 작성할 때나, 책을 고를 때나 항상 지은이를 중요하게 생각한다. 

(모르는 사람이지만, 지은이 정보를 꼭 참고한다.)

<쓰면서 익히는 알고리즘과 자료구조>의 지은이는 '윤대석'님!

 

그리고 지은이의 말도 꼭 읽어본다.

책의 구성과 관련된 <지은이의 말> 속의 내용 중,

 

ㅡ 필자는 이 책에 알고리즘 문제 해결을 위해 가장 최적화된 해결책을 바로 제시하지 않고, 다양한 접근법을 고민해보고 차근차근 단계별로 풀이하는 과정을 담고자 했다. 

 

이런 언급이 있다. 사실 최적화된 해결책을 익혀서 확장하는 것도 정말 좋은 방법이겠지만, 지은이 윤대석님은 고민하는 단계별 풀이를 강조하고 있다. (노트 레이아웃이라는 방법을 사용하는 것에서도 고민과 방향을 강조하는 것이 느껴진다.)

 

문제에 급하게 도전하기보다는 문제 해결의 방향을 가장 먼저 차분히 그려보는 태도가 나에게 꼭 필요하다. 이런 부분에서 윤대석님이 지향하는 학습 방법이 나에게 적절하다고 생각한다. 

 

 


4. 그 외 마음에 드는 부분:

 

아직 이 책으로 공부해보지 않아서 정확한 장단점을 체감하지는 못했다. 그러나 꼼꼼히 살펴봤고, 가지고 있는 책과 비교해서 최선을 다해 프리뷰했다. 그 결과 분명히 이 책만의 차별점과 장점을 볼 수 있었다. 

 

그럼 언급하지 않은 장점을 간단히 나열해보겠다.

 

ㅡ 효율과 관련된 부분을 항상 제시한다. 시간 복잡도 O를 항상 언급하는 것이 마음에 들었다.  

그럼 언급하지 않은 장점을 간단히 나열해보겠다.

 

ㅡ 효율과 관련된 부분을 항상 제시한다. 시간 복잡도 O를 항상 언급하는 것이 마음에 들었다.  

ㅡ 무작정 예제나 코드를 제시하지 않고, '아이디어'를 상세하게 검토하게끔 하는 구성이 좋았다.

ㅡ 옳은 방향으로 충분히 생각해볼 수 있도록 생각의 방향을 친절하게 정리해준다.

 


  어떤 책으로 공부하든지 습득은 본인의 몫이지만, 잘 정리된 책은 학습효율을 높인다. 특히 새로운 것이나 어색한 것을 공부하려고 할 때 거의 책의 흐름을 따라가며 지식을 얻는 편이다. 이 책을 프리뷰해보니 마음에 꽤 들어서 내가 아끼는 책꽂이에 둘 것이다. 


  "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
출처: https://splendidlolli.tistory.com/319 [가을에 태어난 마초강아지]

스크린샷 2021-05-22 오후 11.05.47.png

 

알고리즘이 막막하고 어려웠다면, 가장 알맞는 책인것 같아요!

알고리즘 설계 캔버스에 대해 이해하고, 분야별로 어떻게 접근해야하는지,

어떤 방식으로 알고리즘을 짜야하는지에 대해 배울 수 있었습니다.

 

자세한 설명과 캔버스 항목으로 접근하는 풀이를 통해 알고리즘에 대해 체계적으로 배울 수 있어서 좋았습니다.

다만 코딩을 처음 접하시는 분들에게는 어려울 책이고, 문법이나 자료구조에 대해 조금 공부하고 책을 보시길 권해드립니다.

기본서를 한권 보시고 난 뒤에 보시면 충분히 공부하실 수 있을 것 같습니다 ㅎㅎ 

그만큼 저자분께서 이해하기 쉽도록 풀어서 설명하려고 하신게 느껴집니다! 

 

 

그동안 알고리즘을 외워서 공부하셨던분들, 코딩테스트를 앞둔 분들, 알고리즘에 대해 처음 배우시는 분들에게 추천드립니다 :)

 

 

 

 

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

 

 

리뷰를 시작하기 앞서
 
이 리뷰는 한빛미디어 도서 서평단으로 책을 받아 리뷰를 쓰는 글임을 알립니다.
 
목차
 
목차는 일반 알고리즘 책과 비슷하게 다양한 자료구조와 알고리즘 순서로 되어있다.
 
기본적인 자료구조인 배열, 연결리스트, 스택, 큐부터 알고리즘 문제로 자주 등장하는 문자열, 다이나믹 프로그래밍 등이 수록되어 있다.
 
이 책의 특징
 
이 책은 일반적인 코딩테스트를 준비하기 위해서가 아닌 알고리즘의 생각법과 접근법을 제시해준다. 이 책만의 장점이라고도 할 수 있는 노트 레이아웃을 사용해 문제의 아이디어를 제시하고, 시간복잡도와 공간복잡도를 생각하며 문제를 풀 수 있게끔 자연스럽게 유도해준다. 그러한 점에 있어서 일반적인 코딩테스트 뿐만 아니라 면접에서 접할 수 있는 알고리즘 손 코딩에도 대비할 수 있게 된다.
 
문제는 외국에서 가장 유명한 사이트 중 하나인 릿코드 문제를 활용하는데, 문제들을 릿코드에 들어가서 직접 풀어볼 수도 있다.
 
최근 가장 많이 사용되는 코딩테스트 언어 중 하나인 파이썬을 사용한다는 것도 이 책의 장점이라고 볼 수 있다.
 
마지막으로, 알고리즘 노트 방법을 위한 사이트 추천과, 알고리즘 학습을 위한 사이트 소개로 마무리가 되는데 이 사이트 또한 알고리즘을 풀면서 유용하게 참고할 수 있어 책을 다 읽고 난 뒤에도 추가적인 학습을 유도하고 있다.
 
추천 독자
 
개인적으로 파이썬을 사용하며 코딩테스트를 준비하는 사람이고, 또한 손코딩 시험을 볼 수도 있는 면접이 두려운 사람이라면 한번쯤 읽어보고 방법을 터득하면 좋을 것 같다. 이 책에 나와있는 노트 레이아웃 방법을 손코딩 시험에서 활용하면 좋을 것 같다는 생각을 했다.
 
마치며
 
한빛미디어에서 파이썬 알고리즘 책으로 유명한 나동빈님의 이것이 코딩테스트다 책과 더불어 이 책도 알고리즘을 익히기에 정말 좋은 책이라고 생각을 했다. 이것이 코딩테스트다 책을 다 읽고 무엇을 풀지 고민하는 사람이 있다면 과감하게 이 책을 보며 릿코드를 풀어보기를 적극 추천한다!

쓰면서 익히는 알고리즘과 자료구조

- 알고리즘 설계 캔버스 구성 -

1.jpg

 

 

안녕하세요. 율리시스SS입니다.

 

요즘에 코딩 굉장히 핫하죠. 몸값 많이 올랐다 등등... 물론 예전보다 처우가 개선되고 좋아진건 맞습니다만 아직까지는 상위 몇%만

해당합니다.

상위로 가기 위해서는 취직을 하더라고 공부를 해야하는데요. 코딩테스트... 알고리즘... 자료구조... 어렵습니다...

 

제가 이 책을 읽고 간단히 든 생각은 처음 알고리즘과 자료구조를 배우시는 분들은 추천드리고 싶은 책입니다. 저 역시 코테로 취직한건

아니지만 요즘 코테 준비를 조금씩 하고 있는데 이 책을 읽고 이해가 쉽고 공부하는 방식이 너무 좋아서 추천해 드리고 싶었습니다.

쓰면서 익히는 알고리즘과 자료구조

알고리즘 설계 캔버스를 작성하며 배우는 알고리즘 문제 해결 전략

2.png

 

| 같은 알고리즘, 자료구조 책이라고 하더라도 포인트가 조금씩 다릅니다. 이 책의 저자는 다양한 접근법을 고민해보고 차근차근 단계별로

풀이하는 방법으로 자필했다고 합니다. 

알고리즘 설계 캔버스라고 제한사항, 아이디어, 복잡도, 코드, 테스트로 단계별 설명을 통해 이해하기 쉽게 문제를 풀이합니다.

 

3.png

 

 

| 설명역시 그림만 딸랑 주는게 아닌, 그림에서 과정을 설명하는데 이 부분에서 매우 좋았습니다.

알고리즘과 자료구조는 난이도가 쉬운 부분이 아니기 때문에 이해가 중요한데 이런 부분에서 이해가 정말 쉽게 왔다는게 좋았네요.

알고 있는 알고리즘이나 자료구조 역시 내부 과정을 한번 더 봄으로 써 이해가 더욱더 쉬웠습니다.

 

 

4.png

 

| 알고리즘 설계 캔버스 구성 요소로 문제를 풀이합니다.

 

하나의 문제는 하나의 풀이만 있는게 아닙니다. 다양한 풀이가 있는데 문제를 해결할 수 있는 1~3개 정도의 접근 방법을 알려주며 아이디어의 시간과 공간 복잡도를 추정하며 코드를 짜는데 이 부분이 너무 좋았습니다. 기존의 도서는 보통 한가지의 풀이만 제시해주는

반면, 다양한 방법을 제시하며 좀 더 코테에서도  좀 더 다양하게 문제를 풀 수 있는 능력을 기르는것 같았습니다.

 

5.png

 

| 필자는 자바개발자 입니다. 파이썬은 대학교때 잠깐 배운게 끝인데요. 파이썬을 챕터 초반부만 알고 있어서 어느정도 쉽게 문제풀이가 가능했습니다. 파이썬으로 개발하는게 아닌, 알고리즘 문제를 풀기 때문에 쓰는것만 쓴다고 생각하시면 될것 같은데요. 코드도 간략해서

좋았습니다.

 

알고리즘 설계 캔버스는 새로운 느낌이였습니다. 문제 풀이가 이렇게 다양하다는 것에서도 놀라웠고 다양한 방법으로 풀이가 가능하기 때문에 코테에서도 한가리 장르의 문제를 다양하게 풀이가 가능하기 때문에 이책에서도 한문제를 다양한 방법으로 풀이하는게 능력을 키우는데

좋은것 같습니다.

한빛미디어 <나는 리뷰어다> 활동을 위해 제공받아 작성하였지만

제공 측의 간섭 없이 필자가 느낀 점 그대로 작성하였습니다.

작성일 : 2021년 05월 21일

최종 수정일 : 2021년 05월 21일

* 오류 수정은 블로그에서만 합니다.

* 블로그 : http://blog.naver.com/adg0609

CopyRightⓒ.2021.율리시스SS.All Rights Reserved

알고리즘! 하면 뭐가 떠오르시나요?

저는 '어렵다'가 가장 먼저 떠오릅니다.


어려운 이유중에 두가지를 꼽자면...

마치 '어려운 수학' 같아 응용력을 사용해 기본 이론에서 정답으로 가는 길을 펼쳐야 하는것과

문제로 다다르기 위해 거쳐야 하는 과정이 너무나 많다는 것입니다.


지금까진 '실전에서는 잘 안쓰였다' 라는 핑계로

대충 하거나 나중에 한다고 미룰 수 있었지만

'데이터 분석' 분야가 중요해지면서

'정교'하고 '정확'함을 요구하는 일이 많아졌습니다.

 

왜이렇게 장황하게 얘기하고 있냐구요?

저도 데이터 분석을 하고 싶어서 계속 두드리는 분야기 때문이죠...

오늘은 따끈따끈한 알고리즘과 자료구조를 배울 수 있는 한빛미디어의 신작을 소개할까 합니다.

 

 

[쓰면서 익히는 알고리즘과 자료구조]

 

- 쓰면서 익힌다?


 '지은이의 말'에 보면 시간이 많이 소요되지만 다른 사람들의 풀이법을 이해가 될 때까지 확인하며 다양한 방법을 익히고 그 다양한 방법들로 문제를 해결하는 과정에 성취감을 느꼈다고 한다.


 사실 처음에 '쓰면서 익힌다'라는 제목을 봤을때는 초중고에서 수학을 배울때 처럼 공식이 무의식적으로 툭 튀어나올때까지 외우라는 말인가... 하며 실망했지만 지은이의 말을 읽고나니 이미 해결책을 알고 있는데 다른 해결책을 받아들인다는 것이 굉장히 어려운 일이겠구나 싶었고, 이걸 또 활용하기 위해 내것으로 만든다 라는 뜻이라는것을 느꼈다.


- 그래서 어떻게 쓰면서 익힐껀데?

 보통 대학에서 슈도코드(pseudocode, 의사코드)라는걸 활용해서 코드를 쓰고, 순서도라는걸 활용해서 그림을 그린다.

이 책에서 지은이는 'Hiredintech' 사이트에서 제공하는 알고리즘 설계 캔버스 라는 노트 레이아웃을 활용하면 실수를 줄일 수 있어서 추천하며 책에서 적극 활용한다.

좌 : 지은이가 추천하는 노트 레이아웃 설명, 중 : 글쓴이가 추천하는 노트 레이아웃 양식, 우 : 노트 레이아웃 사용 예


- 알고리즘, 어떻게 접근해야해?

 알고리즘 하면 빼놓을 수 없는 '복잡도'를 간단히 설명한다. 문제를 해결하는데 얼마나 최적화될 수 있는지를 설명하는 이 '복잡도' 라는 녀석은 빅 오 표기법으로 많이 나타내는데, 아래와 같이 간단한 식으로 초보자도 익힐 수 있을만큼의 쉬운 설명을 한다.


- 이 책의 장점을 꼽자면?

1. 정말 쉽게 설명하려고 노력한 흔적이 보인다.

 아래 사진을 보면 알겠지만 알고리즘은 반복되는 프로그램의 실행 값을 구하는 일이 많기 때문에 머리속으로만 계산한다는것은 매우 어려운 일이다. 보통 변수가 증가하거나 감소하는 수를 써가며 문제를 푸는것이 일반적인데 이를 아래처럼 그림으로 쉽게 설명함으로써 더욱 이해가 잘되게끔 한다.

2. 지은이의 말에 나온것처럼 해결책으로 가는 가장 빠른길이 아닌 다양한 길을 생각하게 만든다.

 '이 문제의 정답은 뭘까요? 정답은 A입니다.' 같은 진행방식은 수많은 문제집에서 보았다. 이 책은 '이 문제는 어떻게 접근하면 좋을까?'를 고민하게 만들어 함께 차근차근 풀어나가는 느낌을 받게 한다.


3. 책에서 활용되는 언어, 파이썬

 이 책에서 의사표현 코드로 사용되는 파이썬은 파이썬을 깊게 알지 못해도 변수명과 흐름을 보고 어느정도 이해할 수 있는 난이도로 표현되어 있어 언어가 그리 큰 장벽은 되지 않는다.


4. 이 책에 사용되는 기술명에 대한 간단명료한 설명

 한가지 예를 들어보자면 가장 첫 장의 '배열' 에 대해 구구절절 설명하는것이 아닌 '연속적인 메모리 공간에 저장된 아이템의 집합을 표현하는 자료구조' 라고 간단명료하게 정의를 내린다. 기술에 대한 입문서가 아니기 때문에 설명에 필요한 부분을 심플하게 풀어낸 것이 매력적이다. 



- 이 책의 아쉬운점을 꼽자면?

1. 아쉬운점이라기보단 아무것도 모르는 초보들에게 추전하지 않는다.

 위 장점4에서 언급한것처럼 구구절절 설명하지 않기 때문에 '프로그래밍'을 조금이라도 해본 사람들이거나 자료구조에서 사용되는 단어에 대해 어느정도 아는 사람이 최소 타겟이 되지 않을까 싶다.


2. 책 설명에서 나왔던 노트 레이아웃 양식을 굳이 맞출 필요가 있었을까?

 책에서 설명한 노트 레이아웃 양식을 보면 한쪽에 설명을 하면 한쪽은 사용되지 않는다(예를들어 좌측이 사용되면 우측은 비어있는 형태가 대부분).

책의 특성상 공간 활용이 어렵기 때문이라 생각되는데... 굳이 한정된 공간을 갖는 책에서 노트 양식을 맞추기 위해 노력해야 했을까 싶다. 사용 예만 보여주고 빈 공간을 좀 더 잘 활용했으면 좋았을 것 같다.

 

- 그래서...

 너무 어려운 세계... 알고리즘과 자료구조 역시 정답은 여러번 해보는(쓰면서 익히는) 수밖에 없을것 같다.

대기업 채용 테스트에 '최적화'가 차이를 가르는 '키'인만큼 알고리즘과 자료구조의 중요성은 날이 갈 수록 더욱 커지고 있다. 이 한권으로 뚝딱! 하는건 어렵겠지만 최소한 알고리즘을 공부하고 싶다! 라는 사람이 있다면 이 책을 추천하고 싶다.

 

KakaoTalk_20210521_035903859.jpg

 



오랜만에 번역서가 아닌 국내 개발자님이 직접 쓰신 서적을 만났습니다. 표지는 깔끔하게 흑백으로 색을 구성하고 제목이 부각되도록 큼직하게 상단과 중간에 자리 잡고 있습니다. 주위에는 알고리즘을 구성하는 함수와 테스트 케이스로 보이는 코드로 장식하고 있네요. 파이썬 언어를 사용할 것이라는 것을 짐작할 수 있게 해 줍니다.

 

작가는 10년 이상 경험을 하신 베테랑 개발자입니다. 리눅스 커널 쪽에 분석과 수정 작업을 하실 정도이니 알고리즘이나 자료 구조 쪽에 깊은 이해력을 갖고 있으심은 분명합니다.

 

서문에서는 알고리즘이 필요한 이유와 알고리즘을 고안할 때 사용할 수 있는 노트 레이아웃이라는 방법을 소개하고 있습니다. 노트 레이아웃은 다른 책과 구별되는 이 책의 특징이라고 볼 수 있을 듯 합니다. 특정 기능을 구상할 때 머리 속으로 대충 생각하고 손부터 움직이는 경우가 많습니다. 이렇게 노트로 기록을 하게 되면, 생각도 정리를 잘 할 수 있고 코딩을 할 때도 일목요연하게 잘 진행할 수 있을 것 같습니다. 물론, 코딩부터 하게 되는 급한 마음을 잘 다스릴 수 있어야 하지만 말입니다.

서문에서는 7개의 챕터가 있다고 소개하고 있지만, 실제로는 8개의 챕터로 구성되어 있습니다. 아마 집필 당시에는 7개로 구성했으나, 이후에 챕터가 추가된 것이 아닌가 싶습니다. 마지막 장이 정렬 알고리즘인데, 알고리즘을 설명할 때 보통 가장 먼저 등장하는 부분입니다. 정렬이 알고리즘에 기본이 되는 개념이기 때문인 것 같습니다. 그러나 이 부분이 뒤에 가 있어서 책의 구성 관점에서 조금 아쉬운 부분이라고 생각합니다.

 

차례 부분을 보게 되면, 각 소제목 란에 '문제 기술 및 설명', '노트 레이아웃을 이용한 문제 접근 및 풀이', '관련 문제 사이트' 가 계속해서 반복되고 있습니다. 이러한 반복되는 내용은 책의 구성 부분에 간단히 설명을 하고, 차례 부분에서는 제외를 하는 것이 더 좋지 않았나 하는 생각을 해 봅니다. 프로그래밍의 규칙 중에도 DRY (Don't Repeat Yourself)가 있을 만큼 개발에서도 반복되는 작업은 가능한 제거해주는 것을 권장하듯이 말입니다. 그리고, 8장은 이러한 진행 방식에서 벗어난 챕터로 구성되어 있어, 다른 챕터와 이질감을 느끼게끔 하기도 합니다. 아무래도 8장은 원래는 Appendix 에 처음이 포함되어 있다가 본 내용으로 들어오지 않았나 하는 짐작이 됩니다.

 

각 장마다 도입부에 필요한 개념에 대해서 그림을 잘 활용해서 설명을 하고, 부분적으로 필요한 코드들을 보여줘서 실제 구현할 알고리즘에 대한 이해력을 높여주고 있습니다. 배열, 문자열, 연결 리스트까지는 설명도 풍부하고, 조금은 배경 지식을 가지고 있어서 그런지 술술 잘 읽혀진다는 느낌이 들었습니다. 그러나, 재귀부분과 동적 프로그래밍 부분은 상당히 난해하다는 생각을 했습니다. 조금 더 지면을 할애해서 개념에 대한 더 자세하고 많은 설명이 있었으면 하는 아쉬움이 있습니다. 이 부분은 알고리즘 문제도 어렵기도 하고, 개념 이해도 명확히 되지 않아서 다른 자료를 좀 더 찾아봐야 할 것 같습니다.



KakaoTalk_20210521_050659236.jpg

 



스택을 이용해서 알고리즘을 설명하는 부분은 그림도 잘 와 닿고, 설명도 절차적이고 상세해서 이해하기가 쉬웠습니다. 풀이하는 문제도 흥미로운 주제이기도 해서 재미있게 읽어 나갈 수 있습니다.

 

전체적으로 이 책에 대해서 알고리즘 풀이집같은 느낌을 받았습니다. 알고리즘이 쉽게 이해하기가 쉬운 분야인 만큼 작가 분이 설명을 가능한한 자세히 해 주시려고 이 책에 심혈을 기울였음 알 수 있는 부분이 자주 보였습니다. 그러나 조금은 앞 쪽보다 뒤 쪽에 있는 챕터 쪽에 설명이 더 많았으면 하는 아쉬움은 있습니다. 뒤로 갈수록 점점 더 개념이 어려워지는 경향이 있기 때문입니다. 요즘 개발자 입사 시험에는 코딩 테스트가 자리 잡고 있는 것 같습니다. 이것을 준비하는 예비 취업자들에겐 좋은 참고서가 될 것 같습니다. 이 책이 중요시하고 있는 타겟이 이 부분들이기도 하겠지요?



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

1.인트로 - 

최근 개발자의 몸값이 올라가면서 많은 사람들이 개발 공부를 시작했다. 개발자는 생각보다 학력이 많이 중요하지 않고, 얼마나 컴퓨터를 이해하고, 잘 활용하느냐에 따라 실력이 갈리기때문에 비전공자들도 쉽게 시작하는 추세이다. 개발 공부를 한다고 하면 가장 먼저 공부해야할 것은 바로 "알고리즘 과 자료구조"이다. 수학문제를 푸는데 공식을 모르고 풀면 비효율적이고 힘들게 풀 수 밖에 없다 이게 바로 우리가 알고리즘을 배워야하는 이유이다. 이번에 한빛 미디어에서 새로운 알고리즘 공부책이 나오고 받아서 읽게 되었다.

2.메인 내용 - 

 

  
목차설명

사실 목차는 다른 알고리즘 책들과 큰 차이가 없었다. 정렬, 큐, 배열 등의 필수적인 알고리즘 들을 설명하고 있다. 그리고 아래 사진과 같이 알고리즘을 설명해준다. 그냥 무작정 알고리즘의 원리를 설명하는 것이 아닌, 어떤 제약사항이 있고, 왜 이런 알고리즘을 써야되는지 논리적으로 스스로 생각할 수 있도록 도와준다. 코드는 대부분 비슷하니 넘어가겠다.

 

3.나의 생각 - 

사실 알고리즘 공부 책의 대부분 목차는 비슷해서 어떻게 어려운 알고리즘을 잘 풀어서 쉽게 정리하느냐가 중요하다. 이 책은 위에서 말한 아이디어 노트를 작성하는 방법을 소개해준다. 사실 이렇게 까지 제약사항이나 어떻게 이 생각을 했는지 정리해둔 책은 잘 보지 못했다. 그리고 자칫하면 헷갈릴 수도 있는 시간 복잡도와 공간 복잡도도 잘 보여줘서 편했다. 코드의 질은 말할 것도 없고, 부가적인 설명도 한빛미디어식으로 좋은 손그림과 함께 잘 설명이 되어있다.

4.마무리 - 

마무리를 지어보자면, 현재 코딩테스트를 위해 많은 사람들이 알고리즘을 공부하고 있고 이 분야 책은 권위있는 책들이 이미 많아서 레드오션이라고 생각한다. 하지만, 그렇다고 새로운 책이 나오지 않는다면 그것또한 문제이다. 앞으로도 계속 문제 트렌트, 코딩 트렌드는 바뀌는데 이 책은 가장 최신의 파이썬 트렌드를 잘 반영한 것 같다. 그래서 이 책 한권만 볼 것이 아니라, 유명한 권위있는 책 한권과 병행해서 보면 가장 베스트인 것 같다.

 

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

[목차]

chapter 1 배열(Array)

chapter 2 문자열(String)

chapter 3 연결 리스트(Linked List)

chapter 4 스택(Stack)과 재귀(Recursion)

chapter 5 큐(Queue)

chapter 6 트리(Tree)

chapter 7 동적 프로그래밍(Dynamic Programming)

chapter 8 정렬(Sorting) 알고리즘


[서평]

왜 알고리즘을 배워야 할까?

알고리즘을 그냥 네임드 회사의 코딩 인터뷰&테스트를 위한 용도로만 생각 했었다. 하지만 현업 개발을 하다보면 ‘시간 복잡도’, ‘공간 복잡도’ 같은 개념을 알고 프로그래밍하는 차이는 나중에 엄청나게 차이가 나게 된다. 개발과정에서 현실적인 문제 해결을 위해 어떤 자료구조와 알고리즘을 써야 하는지 고민하게 되는 좋은 습관이 생겼고, 다른 개발자들의 코드를 리뷰 하는 과정에서 좋은 제안도 할수 있을 것이다.


노트 레이아웃을 이용한 알고리즘 문제 풀이 접근 방법

문제 분석과 함께 어떤 알고리즘과 자료구조가 적절한지 파악한다

문제로 부터 요구사항과 제한 사항을 수집한다.

어떤 식으로 접근할지 다양한 아이디어를 제시한다.

코딩을 통합개발환경 도움 없이 화이트 보드나 종이에 연습한다.

시간/공간 복잡도를 고려한다어떤 테스트 케이스를 통과 하는지에 대해 고려한다.

 

 

노트 레이아웃 소개

알고리즘 문제를 접하고 바로 코딩을 시작하게 되면 종종 제한사항을 잘못 인지하거나 고려하지 못한 테스트를 보는 경우가 생긴다. 하지만 이 레이아웃을 활용하게 되면 제한 사항과 테스트를 미리 적을 수 있어 이러한 실수를 줄일 수 있다.


Constraints(범위, 제한 사항)

알고리즘 문제를 풀다 보면 기본 변수 타입의 범위를 벗어나는 경우가 있다. 예를 들어 정수형이 가질수 있는 값보다 크거나 작아지는 경우, 배열이나 리스트 범위를 벗어나는 경우, 문자열의 길이를 제한하는 경우, 추가적인 메모리 할당을 제한하는 경우 등 다양하게 나타 날 수 있는데 이러한 제한사항을 미리 파악해야 한다.


문자열, 배열 그리고 숫자

배열은 얼마나 많은 요소들을 가질수 있는가?

문자열의 경우는 길이가 얼마나 길어질 수 있는가?

배열에서 요소들이 유일한 값으로 채워져 있는지, 중복을 허용하는지 확인 하자.


반환값

문제의 반환값은 어떤 형태이고 어떤 값을 원하는지 정확히 파악하자. 만약에 배열에서 증가하는 최장 공통부분 수열을 구한다고 하자. 이때 반환해야 하는 것은 길이 인지 시작 인덱스인지 혹은 둘다 인지 확인할 필요가 있다.


Ideas(문제 풀이 접근 방법)

보통 문제 풀이 방식은 1~3개 정도다. 예를 들어, 배열에서 특정 값을 찾는다면 배열의 처음부터 하나씩 확인하며 해당 값을 찾아갈 수도 있고, 정렬된 배열이라면 이진 탐색을 진행할 수도 있다. 이런 식으로 어떤 알고리즘 혹은 자료구조를 활용할지 접근해보는 연습을 해보자.


Complexity(복잡도)

자신이 생각한 알고리즘이나 자료구조를 사용하여 문제를 해결하는데 얼마나 시간이 걸리지, 얼마나 많은 공간을 사용해야 하는지에 대한 지표를 제공해주기 때문에 얼마나 최적화되어 만들어 졌는지 쉽게 인지할 수 있다.


Code(코드 작성)

아이디어에 해당하는 내용을 코드를 작성한다. 본인이 사용하는 언어로 개발도구에 의존하지 않고 작성하는 연습을 해보자. 또한 자신이 생각하는 알고리즘에 대한 구현은 어떻게 해야 할지 고민을 해야 한다.


Test Cases(테스트 케이스 검토)

가장 기본적인 입력에 대한 검증이 가장 중요하다. 우선 본인이 구현한 코드로 문제에서 제공하는 입력 해결을 해야 한다.



책의 구성

자료구조와 알고리즘을 분류하고, 각 자료구조와 알고리즘에 해당하는 문제를 분석하고 문제 풀이를 진행 하는 방식으로 구성되어 있다.


자료구조 및 알고리즘 설명

다양한 자료구조와 알고리즘의 기본적인 설명을 기술한다. 코드는 파이썬으로 만들어졌으며, 라이브러리 호출이나 사용법을 설명이 잘되어 있다. 각 챕터별 자료구조 기분으로 코딩 문제 풀이를 파이썬으로 설명하고 있다. 


이책에서 언급한 자료구조를 중심으로 학습한다면 온라인 코딩 테스트 사이트의 쉬운,보통 수준의 문제를 어느 정도 해결이 가능 할것이며, 코딩 테스트 및 코딩 인터뷰를 준비하는데 크게 무리가 없을것이라 생각한다.




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

[ 선택 이유 ] 

최근들어 친구 몇명과 함께 코딩테스트 스터디를 시작했다. 일주일에 2문제씩만 꾸준히 풀어나가는게 목표였다. 다행이 2달동안 진행하며 코테에 어느정도 익숙해졌고 이젠 점점 어려운 문제에 도전해나가고 있다. 

학부시절에 알고리즘 수업을 들었고 여기저기서 다양한 알고리즘과 이론등에 배웠지만 이를 실전에 써보는건 만만찮은 일이었고 다시 공부할 필요성이 느끼고 있었다. 이런 와중에 의도에 딱맞는 책이 있어 신청하게 되었다.

다만 나는 프론트엔드 개발자이지만 해당 책은 파이썬으로 구성되어있다. 다행스럽게도 파이썬 코드를 읽을줄 알고 최근 업무에도 파이썬관련 업무가 들어와 이제 슬슬 익숙해져있을 때이기에 기분좋게 읽을 수 있었다.

[ 본문 ] 

이 책은 코딩 테스트를 시작하는 사람 or 코딩 테스트에 체계가 필요한 사람에게 추천할 만한 책이다.

나는 코딩 테스트에 체계가 필요했던 사람에 속해있었다. 

전체적인 내용은 어렵진 않았으며 특히 각각의 알고리즘에 따라 설명이 전개되어있지않고

배열 ->문자열 -> 스택,재귀 ->큐 -> 트리 -> DP -> 정렬 순으로 확장하며 내용이 진행된다.

모든 자료구조의 기초인 배열부터 마지막 정렬까지 전부다 익히게 된다면 왠만한 코딩테스트는 어렵지 않으리라 생각한다.

하지만 전부다 익히는 것도 적재적소에 활용하는 것은 또다른 문제이다. 

저자는 이에 대한 해결책으로 알고리즘 설계 캔버스를 제안한다.

알고리즘 설계 캔버스는 아이디어, 복잡도, 코드, 테스트로 이루어진 테이블로 기존에 문제만 보면 풀기 급급했던 잘못된 습관을 고쳐주고 아이디어부터 차근차근 생각해가며 문제를 풀어나가는 기준을 마련해준다.

실제로 코딩 테스트를 할때에 직접 설계캔버스를 그려가지 하진 않지만

이후에는 코드를 작성하기전에 상단에 주석으로 아이디어, 예상되는 시간복잡도, 테스트상황을 요약하고 풀이를 진행하게되었다. 

이런 습관을 익히고 나니 코드 중간에 헤매는 일도 적어지도 문제가 발생했을때 아이디어단에서의 문제인가, 잘못된 코드작성으로 비롯된 문제가 빠르게 파악할 수 더 큰 장점을 얻을 수 있었다.

요새 다양한 알고리즘, 코딩 테스트 관련 도서가 나오고 있다. 대부분이 문제 풀이에 대한 접근이 중점이라면

이 책은 문제를 풀어가는 과정이 중점인 희안하지만 아주 가치있는 책이다.

[ 총평 ]

난이도 : 중

'코딩 테스트를 통과하기 위해선 답보단 과정을 공부해야한다. 이 책은 그런 책이다'

 

  •  

 

파이썬으로 되어 있지만, 언어와 상관없이 알고리즘을 문제를 여러 관점에서 발전시켜 갈 수 있는 팁과 예들이 있어요.

책의 내용은 기본적인 자료구조와 알고리즘에 대해 문제를 풀이하는 과정을 직접 노트 레이아웃을 작성해가면서 공부할 수 있게 잘 구성이 되어있는 것 같다

 

 

얇은 책이고 많은 문제가 수록된 것은 아니지만 노트 레이아웃을 기록하며 효율적으로 학습하고 기록하고 문제를 풀이하는 습관을 들여 이 책에 수록된 문제 이외에 별도로 코딩 인터뷰 사이트에서 문제를 풀이하면서도 계속해서 이 책에서 공부한 방법대로 공부하면서 기록하는 것을 권장하고 있다

 

저자의 노하우가 녹아들어 코딩 인터뷰를 처음 부터 어떻게 준비해야될지 모르거나 이미 공부했었어도 어떻게 자신이 한번 공부 했던 것을 다시 떠올리기 쉽도록 기록할 수 있는지에 대해 배울 수 있다

 

그동안은 그냥 문제풀이와 답과 간단한 과정을 블로그에 기록했었는데 이 책의 방법대로 한번 시도를 해보는 것도 좋은 방법중에 하나 인 것 같다

 

코딩인터뷰를 효율적으로 준비하는 자신의 방법을 찾아나가는 하나의 좋은 방법중에 하나 인 것 같다

 

20210516_111211.jpeg

 

 쓰면서 익히는 알고리즘과 자료구조

 

 

올해 처음 리뷰를 할 책은

"쓰면서 익히는 알고리즘과 자료구조" 이다.

 

개발자마다 차이가 있겠지만

대부분의 개발자들은 취업 이후 알고리즘이나 자료구조같은 내용은 거의 들여다 보지 않을 것이다.

나도 마찬가지다.

그나마 읽어봤던 책이라면 임백준님의 "누워서 읽는 알고리즘" 정도를 IT교양서로 생각하고 빠르게 읽어본게 전부이다.

 

이 책은 어렴풋이 각 개념들을 다시 상기 시켜주었다.

재미있게도 이 책에서는 코딩 테스트 사이트에서 만나 볼 수 있는 문제들을 이용해

알고리즘과 자료구조를 설명하고 있다.

그리고 아래 그림과 같이 이해하기 쉽도록 그림들을 적절히 배치해 놓았다.

 

 

 

 

또한 문제를 정확히 인식하고 분석하기 위해

"노트 레이아웃" 이라는 툴을 적극 활용하고 있다.

이 툴을 사용해 "제한사항"을 확인하고, "아이디어"에서 문제를 풀 수 있는 기본적인 설계를 유도하며

"코드"를 통해 해당 문제를 풀수 있도록 한다.

 

 

 

이 책에서 사용되는 언어는 파이썬이다.

파이썬을 공부하지 않았다면 코드를 읽고 이해하는데 약간의 어려움이 있을 거라고 생각된다.

 

 

 

마지막으로 

이 책은 취업전의 학생들, 프로그램을 공부하는 사람들이 읽어 보면 좋을거 같다.


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

목차

 

 

chapter 1 배열(Array)

 

chapter 2 문자열(String)

 

chapter 3 연결 리스트(Linked List)

 

chapter 4 스택(Stack)과 재귀(Recursion)

 

chapter 5 큐(Queue)

 

chapter 6 트리(Tree)

 

chapter 7 동적 프로그래밍(Dynamic Programming)

 

chapter 8 정렬(Sorting) 알고리즘

 

(-)-1.jpg

 

 

 

(-)-2.jpg

 



알고리즘도 단순히 코드만 수록 하지 않고, 반복문과 조건문을 추적해 보는 연습을 통해, 코딩하는 시점에서 발견하지 못한 문제점을 찾고 

 

해결해 보고, 이를 통해 쉽게 알고리즘 사고력을 기를 수 있게 책을 구성해 놓았습니다.

 



(-)-3.jpg

 

보기처럼 ‘알고리즘 설계 캔버스’를 사용하여, 일련의 알고리즘적 사고 과정을 명확하게 보여주는 것이 위 책의 특징이라고 생각합니다.

 

(-)-4.jpg

 



정렬 같이 말로 설명하기 어려운 부분의 경우, 각 단계별 그림을 수록해 놓아, 독자들의 이해를 도왔다고 생각합니다.



<추천독자>


- IT 직군의 취업 준비생 / 예비 개발자


- 이직을 준비하는 개발자


- 알고리즘 대회를 준비하는 학생



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




이번 5월은 알고리즘에 대하여 리뷰할 수 있는 기회를 받을 수 있었습니다.

학생 생활을 하면서 학부수업 자료구조와 대학원 때는 고급 알고리즘을 통하여 전공 지식을 습득할 수 있는 기회가 있었습니다. 하지만 수업은 어디까지나 수업이여서 아무래도 코딩테스트같이 실용적으로 연습할 수 있는 부분은 부족했었습니다.

하지만 이번에 제공받은 쓰면서 익히는 알고리즘과 구조 책을 읽으면서 자료구조의 개념과 time, space

complexity를 한 번 더 상기시키면서 복습할 수 있었습니다.

무엇보다도 더 중요한 것은 제가 힘들어하고 버거워 하였던 동적 계획법(dynamic programming)을 연습할 수 있는 예제와 직접 써서 연습을 할 수 있는 점이 좋았습니다.

본 책을 통해서 부족한 부분을 연습할 수 있었고, 추가적으로 더 익히고 싶은 부분 및 연습은 구글링을 통하여 보충하였습니다.

또한 Leetcode에서는 어떤 유형의 문제로 출제되었고 옆에 각주로 링크가 첨부되어 있어서 접근성면에서도 뛰어난 점이여서 두고두고 다시 계속 반복해서 읽을 것 같습니다.

마지막으로 좋은 책 제공과 기회를 주신 한빛미디어 담당자 분들께 감사 드립니다. 6월에도 내용이 탄탄한 도서를 읽고 빨리 리뷰를 남기고 싶습니다.

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

#나는리뷰어다 #쓰면서익히는알고리즘과자료구조

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

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
쓰면서 익히는 알고리즘과 자료구조
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

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

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

오탈자 등록

닫기
* 도서명 :
쓰면서 익히는 알고리즘과 자료구조
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
쓰면서 익히는 알고리즘과 자료구조
구입처*
구입일*
부가기호*
부가기호 안내

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

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

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

닫기

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

자료실