알고리즘과 자료구조를 가장 효율적으로 학습할 수 있는 방법은 무엇일까? 바로 노트에 직접 알고리즘 문제 해결 과정을 써보면서 이해하는 것이다. 이 책은 ‘알고리즘 설계 캔버스’ 작성을 통한 문제 해결 과정을 보여준다. ‘알고리즘 설계 캔버스’는 제한사항, 아이디어, 복잡도, 코드, 테스트 영역으로 구성된 한 페이지짜리 노트로 일련의 알고리즘적 사고 과정을 보여주는 최적의 학습 도구이다.
각 장은 다양한 알고리즘과 자료구조(배열, 문자열, 연결 리스트, 스택, 재귀, 큐, 트리, 동적 프로그래밍, 정렬 등)의 기본적인 내용을 소개한 뒤, 관련 문제를 ‘알고리즘 설계 캔버스’의 항목별 내용을 쓰면서 풀어본다. 이 책을 통해 ‘알고리즘 설계 캔버스’를 직접 작성하면서 알고리즘과 자료구조의 이해를 넓혀 개발 역량을 키우고 코딩 인터뷰까지 대비해보자.
알고리즘 설계 캔버스 구성 요소
제한사항(Constraints): 알고리즘 문제의 요구와 제한사항을 발견하고 기록하는 영역
아이디어(Ideas): 문제를 해결할 수 있는 1~3개 정도의 접근 방법을 고려하는 영역
복잡도(Complexities): 생각한 아이디어의 시간과 공간 복잡도를 추정하는 영역
코드(Codes): 아이디어 영역에서 논의한 내용을 바탕으로 구현할 가치가 있다고 생각한 방법을 코드로 작성하는 영역
테스트(Test cases): 구현된 코드의 테스트 케이스를 알아보고 코드 테스트를 진행하는 영역
다른 알고리즘 서적과 달리 몇 가지 차별화된 전략이 인상 깊었습니다. 노트 레이아웃(알고리즘 설계 캔버스)으로 사고 과정을 적어보고 비주얼라이저를 활용해 중간 단계를 눈으로 보며, 구현 과정의 상세한 도식화로 이해하는 과정 덕분에 알고리즘이라는 매운 양파 껍질을 하나 더 벗겨낸 느낌을 받았습니다.
이준희 _가천대학교 학부생
알고리즘 공부를 시작하는 학생이고, ‘쓰면서 익히는’이라는 제목에 끌려 베타리딩을 신청했습
니다. 문제를 풀기 전 생각을 정리하게 해주는 노트 레이아웃(알고리즘 설계 캔버스), 과정을 보여주는 상세한 그림과 설명, 그리고 공부 후 다시 찾아보게 되는 노트 덕에 쉽게 다가갈 수 있었습니다.
장대혁 _헤르스
이 책은 단순히 코딩 테스트를 위한 책이 아닙니다. 좋은 코드를 만들기 위해 알아야 하는 자료구조를 배울 수 있습니다. 수준 있는 개발자가 되기 위해서는 이런 공부가 필요합니다. 오래오래 개발자로 커리어를 이어가고 싶다면 이 책을 3번 읽고 개발 역량(좋은 코드 작성하기)과 취업 역량(코딩 테스트 통과하기) 모두 향상시키길 바랍니다.
김병진 _위메프
이 책은 개발을 하면서 직면하는 문제에 어떤 접근 방식으로 해결할 수 있는지 생각해보고, 어떤 알고리즘을 적용할 수 있는지에 대해 설명해줍니다. 그리고 그 방법이 절대 하나일 수 없다는 듯 하나 이상의 접근 방법으로 제시해주고 있어 다양한 접근 방식에 대한 사고를 할 수 있도록 도와줍니다. 이 책은 알고리즘을 처음 배우는 초심자에게 좋은 가이드 역할을 할 것이라고 생각합니다.
저자소개
저자
윤대석
12년간 임베디드 리눅스 커널 개발, 윈도우 애플리케이션 개발, 리얼타임 운영체제에서의 BSP 개발, 백엔드 개발 등 다양한 개발 경험이 있으며 항상 기본에 충실하고자 노력하는 엔지니어다. 알고리즘과 운영체제를 꾸준히 공부하고 있으며, 오픈 소스 리눅스 커널 분석 및 수정 활동에 참여하고 있다. 한빛미디어에서 『쓰면서 익히는 알고리즘과 자료구조』(2021)를 집필하고 『러닝 Go』(2022)를 번역했다.
알고리즘 문제 해결 능력의 핵심은 ‘알고리즘적 사고력’입니다. 알고리즘적 사고력을 키우기 위한 가장 좋은 방법은 알고리즘 문제를 풀 때 여러 전략을 고민하고 해결 과정을 직접 노트에 써보는 것입니다.
한 페이지짜리 ‘알고리즘 설계 캔버스’는 이런 프로세스를 쓰기 좋은 학습 도구입니다. 제한사항, 아이디어, 복잡도, 코드, 테스트 영역으로 구성된 ‘알고리즘 설계 캔버스’는 일련의 알고리즘적 사고 과정을 명확하게 보여줍니다. 이 책은 ‘알고리즘 설계 캔버스’의 요소별 내용을 완성해가며 문제를 풀이합니다. 직접 ‘알고리즘 설계 캔버스’를 작성하면서 알고리즘 문제 해결 과정을 단계별로 따라가봅시다.
두꺼운 알고리즘 책은 아니지만, 책을 보다보면 유형을 만들고 밀도를 높이기 위해 저자가 고민한 흔적이 보이는 책이었다.
특히 그냥 답을 서술해주고 끝이 아니라 마치 수험자의 입장에서 어떻게 풀어야 할지 프로세스가 담겨 있다는 점에서 이 책은 코딩테스트를 준비하는 사람들에게 적합한 책일거라고 생각한다.
그렇다고 꼭 코딩테스트를 준비하는 사람에게만 적합한 건 아니다. 파이썬 기초문법을 배우고 뭘 해야할지 고민하는 사람에게도 적합할 거라고 생각한다.
비전공자로서 처음 파이썬 문법을 배울 때 느꼈지만, 간단한 문법과 데이터 분석 라이브러리 활용법을 배우고 나면, '그 다음 스텝으로 뭘 해야하지? 뭘 해야 실력이 많이 늘 수 있을까?' 고민을 하게 된다. 제일 좋은 건 프로젝트를 진행해보는 거라고 많이들 얘기하지만, 막상 프로젝트를 진행하자니 뭔가 막막하다. 그렇게 혼란스러운 상태에 계속 있다보면 재미도 없고 그냥 놓게 된다. 내가 그랬다.
그럴 바엔 차라리 코드 구현을 잘 하기 위해서라도 알고리즘 공부를 하는 게 더 효과적일 거라고 생각한다. 알고리즘 공부를 한다고 무조건 코드를 잘 짜는 건 아니겠지만, 그래도 문제를 풀어보면서 코드 구현력이 조금씩 높아질 수 있는 가능성이 있기 때문이다.
특히 답뿐만 아니라 어떤 식으로 문제를 해결하는지 사고 과정을 배우고 싶다면 이 책을 읽으면 좋겠다.
프로그래머들은 취업하는 과정에서 코딩 인터뷰라는 것을 한다. 채용 과정에서 회사는 프로그래머의 역량을 확인해야 하는데, 게임기획자에게 기획자로서의 사고방식과 일을 해결하는 능력을 검증하는 것처럼 프로그래머는 코딩 인터뷰를 통해 그들에게 필요한 알고리즘과 자료구조에 대한 이해도를 객관적으로 검증해낼 수 있는 듯 싶다. <쓰면서 익히는 알고리즘과 자료구조>는 제목 그대로 알고리즘과 자료구조를 효율적으로 익힐 수 있는 방법을 제시하려 한다.
이 책을 읽게 된 이유는 코딩 인터뷰를 준비하기 위함은 아니고, 알고리즘적 사고력이란 것을 알고 배우기 위해서였다. 개인 개발을 하다보면 정확한 상황을 검색하면 그것에 대한 코드를 알려주는 사람은 있어도, 어떻게 해서 그런 코드를 작성해냈는지, 그렇게 작성할 수 있는지 알려주는 사람은 없다. 그저 최대한 이해한다손 치는 건데, 이번에 읽어볼 수 있는 책 중에서 <쓰면서 익히는 알고리즘과 자료구조>라는 책이 있어 알고리즘을 배우면 좀 더 코드를 작성하는데 있어 문제 해결력이 상승하지 않을까란 기대감을 가졌다.
알고리즘 문제를 해결하기 위한 능력인 알고리즘적 사고력을 높이기 위한 방법으로 <쓰면서 익히는 알고리즘과 자료구조>는 그 문제를 푸는 모든 과정을 노트에 적는 것을 제시한다. 그렇게 노트에 적는 방법을 레이아웃화시킨 것이 '알고리즘 설계 캔버스'인데 이 책은 각각의 주제에 관련한 문제들을 제시하고 그것을 '알고리즘 설계 캔버스'를 이용하고 도식화하여 푸는 과정을 하나하나 설명한다. 수학 문제에 대입하면 그 문제를 푸는 풀이법을 정리한 셈이다.
'알고리즘 설계 캔버스'는 크게 다섯 영역으로 구분된다.
- 제한사항(Constraints): 알고리즘 문제의 요구와 제한사항을 발견하고 기록하는 영역
- 아이디어(Ideas): 문제를 해결할 수 있는 1~3개 정도의 접근 방법을 고려하는 영역
- 복잡도(Complexities): 생각한 아이디어의 시간과 공간 복잡도를 추정하는 영역
- 코드(Codes): 아이디어 영역에서 논의한 내용을 바탕으로 구현할 가치가 있다고 생각한 방법을 코드로 작성하는 영역
- 테스트(Test cases): 구현된 코드의 테스트 케이스를 알아보고 코드 테스트를 진행하는 영역
저자가 바라는 것은 문제를 내고 독자가 답을 맞추길 바라는 게 아니고, 문제 해결 능력 자체를 얻는 것이기 때문에 문제의 종류 자체가 많진 않지만 챕터마다 주제를 나누고 각 문제에 대해 마치 과외를 하듯이 문자는 물론 도식화까지 이용하여 하나하나 설명해준다. 언어는 파이썬을 기반으로 하고 있지만 마치 코드 한줄 한줄 설명을 하듯이 디테일한 내용을 담고 있고, 서술 위주이기 때문에 파이썬을 (알면 좋겠지만) 모른다 하더라도 자신이 알고 있는 언어에 대입해 이해하는 것에도 크게 무리가 없는 편이다.
책에서 다루고 있는 주제는 크게 8가지로 나뉜다.
배열, 문자열, 연결 리스트, 스택과 재귀, 큐, 트리, 동적 프로그래밍, 정렬 알고리즘.
앞서 말한 것처럼 '답'이 아니라 문제를 푸는 과정을 통해 해결 능력 상승을 목표로 하기 때문에 책을 완독한 이후에도 지속적으로 무얼 배워야 할 지 방향성도 제시하고 있다.
책 내용 자체가 (주제에 따라선 깊은 내용도 있지만) 요구하는 기본적인 지식의 수준이 낮은 편이기 때문에 책에서 얘기하는 것처럼 코딩 인터뷰를 준비하는 사람이나, 알고리즘에 관심있는 개인 개발자라면 이 책을 통해 어느 정도 궁금증을 해소할 수 있을 것이라 기대한다.
자료구조나 알고리즘 도서를 떠올리면 오래전부터 몇 권의 도서를 읽었기 때문에 공통된 목차의 포맷적인 부분이나어떤 내용을 다룰지가 예상되는 부분이 어느 정도 있다. 그럼에도 불구하고 자료구조와 알고리즘 도서를읽는 것은 즐겁다. 특히 근래에 출간되는 도서들은 나름의 특색이 있고 저자들의 노하우나 공략 포인트를담고 있어서 읽는 재미가 있다. 다른 한편으로는 분명 실무에 많이 사용되고 있으나 아직도 정복하지 못한부분이 많이 있기 때문에 배움의 관점으로 얻는 즐거움이 있다.
쓰면서 익히는 알고리즘과 자료구조는 두가지 의외의 부분이 있었는데, 커널과BSP 경력을 가진 저자가 파이썬을 기반으로 자료구조와 알고리즘을 다웠다는 점과 상당히 책이 얇은 책이다…라고 생각을 했는데 370 페이지가 넘는다는 점이다. 후자에 대해서 말을 하자면 이렇게 얇은 책이면 특정 자료구조나 알고리즘만을 다룰 것이다…라고 예상을 했는데 의외로 많은 부분은 다루고 있고, 이것은 목차만봐도 대부분의 자료구조를 다루고 있지 않는가…
1. 배열(Array)
2. 문자열(String)
3. 연결리스트(LinkedList)
4. 스택(Stack)과재귀(Recursion)
5. 큐(Queue)
6. 트리(Tree)
7. 동적 프로그래밍(DynamicProgramming)
8. 정렬(Sort) 알고리즘
무엇보다 이 책의 특징은 “알고리즘 설계 캔버스를 작성하며 배우는알고리즘 문제 해결 전략”라는 부제에 맞춰 문제해결에 대한 다양한 아이디어를 중점으로 서술하고 있다는부분이고, 이것을 위해서 저자는 알고리즘 설계 캔버스를 구성하자고 제안하고 있다.
이것은 Constraints와 Ideas,Complexities, Test cases와 코드를 이용하여 구성하고 있다. 매 챕터에서단순히 자료구조를 배우고 마무리 하는 것이 아니고, 문제 해결을 다양하게 접근해보자, 다양하게 접근하기 위해서 설계 캔버스를 작성하여 효율성 높은 해결 방법을 도출해보자는 내용이다.
가령 가장 처음 나오는 두 수의 합 찾기에 대해서는 시간 / 공간복잡도를 구성해보고 해당 아이디어를 코딩하는 것으로 시작해서, 또다른 접근 방법으로 해시 테이블을 사용하는방법을 제안한다. 앞서 말했듯이 근래의 자료구조/알고리즘도서는 자신만의 특색을 갖추고 있는 경향이 있는데, 이것이야 말로 이 책의 특색이자, 저자가 포커스해서 독자에게 전달하고자 했던 의도일 것이고 그제서야 서문에서 밝힌 지은이의 말에 많은 공감되었다.
장점은 문제 해결에 대해서 다양한 방법을 생각하고 시도해보도록 제시하는 내용의 흐름으로 본문을 구성한 점이 너무좋았습니다. 익숙히 알고 있는 자료구조에 대해서 이러한 플롯으로 다양한 시도를 유도하는 저자의 의도가느껴져서 번역서가 아닌 국내 저자에 의해서 이러한 도서가 쓰여졌다는 점이 너무 좋았네요. 말하기는 애매하지만, 자료구조와 알고리즘의의 A-to-Z를 기대하고 본 도서를 선택했다면 목적과는 부합되지 않았을거라는 생각이 듭니다.
자료구조와 알고리즘이 나름 방대한 분야여서 비록 자료구조에 익숙하더라도 이 책의 의도대로 다양한 방법으로 문제해결을시도하려고 한다면 읽는 즐거움을 느낄 수 있는 책이었습니다.
대학시절, 학교에서 지원하는 튜터링 프로그램에 참여하여 튜터로 활동한 경험이 있습니다. 그 당시 제가 컴퓨터 전공에서 가장 중요하다고 생각하는 기준으로 튜터링 과목을 "자료구조"와 "알고리즘"을 선택했습니다. 그래서 이 책을 읽으면서 튜티들과 열성적으로 공부를 했던 기억이 새록새록 떠올랐습니다.
그때는 학생 신분으로 전공시험에 나올 법한 이론을 위주로만 공부했었는데 이 책은 여타 다른 알고리즘 서적과 달리 문제 접근 방법을 설명하고 여러 방식으로 풀이하는 것이 인상깊었습니다. 그리고 관련한 알고리즘 문제 사이트를 같이 제공해주어서 바로 실전으로 적용해 볼 수 있는 것이 큰 장점인 것 같습니다. 특히 이 책은 노트 레이아웃을 제안하고 노트 레이아웃 형태로 문제 풀이를 설명하는데 실제로 동일 방식으로 알고리즘을 공부한다면 좋은 습관 형성과 실력 향상에 큰 도움이 될 것으로 보입니다.
우스갯소리로 "IT개발은 Ctrl+C/V 지."라는 이야기를 많이 들었던 것 같습니다. 하지만 이해하고 사용하는 것과 그저 가져다 붙여쓰는 차이가 크다고 생각하기에 초심사의 마음으로 돌아가 이 책을 꼼꼼히 정독해야겠습니다.
4월에 이직 후에 전혀 신경을 못 쓰고 있다가 마감날이 가까워졌다는 걸 인지하고 부랴부랴 책을 폈다.
개발 공부를 하면서 모든 사람들이 알고리즘과 자료구조는 기본적으로 공부를 해야 하는 과목이라고 이야기를 한다.
하지만 이 시점에 내가 궁금한 건, 그렇게 말씀하신 본인들은 알고리즘과 자료구조 공부를 제대로 하셨나이까?
(나라는 사람이 그랬다. 중요하다 생각하고 주위에도 그렇게 이야기하면서 정작 나 자신은 그.러.질. 못했다. 죄송합니다 주위분들!)
학교를 다니면서 수강 과목으로 소화하긴 했지만 과제와 시험에 치중된 부분 위주의 공부로 인해 머릿속에 깊게 남은 것이 없다.
여러 단어들의 반복적인 나열이었을 뿐...
그래서 이번에 5월 리뷰 도서는 꼭 봐야지 라는 생각으로 신청했지만, 역시나 다 보지 못했다.
하지만 시간이 걸리더라도 완독은 분명히 할 것이다.
(어디 가서 개발자 인양 이야기를 하려면 뭐가 뭔지 명칭이라도 알아야지!!)
지은이가 말하는 알고리즘 공부란 본인의 역량이 월등히 발전했다고 체감하기 힘들고, 동기부여가 상대적으로 부족할지도 모른다고 이야기한다. 사실 본인도 공감하는 바였다. 최근에도 더 실무에 가까운 스프링에 대한 깊이와 JPA 활용에 대한 공부를 하고 있고, 클라우드에 대한 리서치를 진행하는 중이기 때문에, 알고리즘이란 마치 정보처리입문과 같은 너무나도 이론적이고 개론적인 학습이라 생각했기 때문이다.
하지만.
날아다니는 개발자와 보통의 개발자들의 차이는 알고리즘에서 차이가 난다.
보통의 개발자들은 필요한 기능을 구현해 내는 것이 목적이지만,
날아다니는 개발자는 그 속에서 문제를 찾아내고, 개발 품질 향상에 큰 기여를 할 수가 있다.
아직 주니어 개발자들에게는 크게 와닿지 않을 수도 있겠다.
머리로는 필요성을 느끼겠지만 그들 역시 실무에 치중된 공부를 하고 있을 테니...
하지만 모두가 인정하는 한 가지는,
유명한 IT 기업들은 알고리즘을 필요로 하는 코딩 테스트를 진행한다.
코딩 테스트를 통과하지 못하면 유명한 회사에 입사할 수 있는 가능성이 현저히 떨어진다는 이야기다.
그.만.큼!
알고리즘과 자료구조는 굉장히 중요한 공부이다!
그럼 이제 책을 살펴보자.
이 책은 독특하게 노트 레이아웃을 이용한다. hiredintech 사이트에서 제공하는 알고리즘 설계 캔버스를 보자.
파이썬을 활용한 자료구조 위주의 알고리즘 문제들에 대한 접근법에 대해 적힌 책입니다. 기본적인 파이썬 및 자료 구조에 대한 이해도가 있는 분들이 접하면 좋은 책으로, 어떻게하면 최적화된 데이터 서칭 및 정렬, 다중 트리에 대한 접근이 가능한지 등 다양한 정보들이 있어 좋았습니다.
이 책은 자료 구조에 대한 문제 풀이 능력을 더욱 향상시키고 싶으신 분들이 읽게 되다보니 크게 문제가 되진 않겠지만, 조금 더 재미있는 예시가 있으면 좋지 않았을까? 라는 생각이 들었습니다. 그만큼 실제 업무에 반영할 수 있는 부분이 많을 것이므로 호불호의 영역이 되겠단 생각도 드네요. 개인적으로 동적 프로그래밍 위주로 보았던 것 같고, 다른 다중 트리 등에 대해서는 참고만 하는 정도로 읽었습니다.
중급 수준의 자료 구조를 다루는 파이썬 사용자분들께 추천드리며, 다른 언어를 쓰시더라도 파이썬에 대한 기초 지식 및 자료 구조에 대한 이해가 있으시다면 접근하시는데에 큰 문제는 없을 것으로 예상됩니다. ^^
파이썬을 활용한 자료구조 위주의 알고리즘 문제들에 대한 접근법에 대해 적힌 책입니다. 기본적인 파이썬 및 자료 구조에 대한 이해도가 있는 분들이 접하면 좋은 책으로, 어떻게하면 최적화된 데이터 서칭 및 정렬, 다중 트리에 대한 접근이 가능한지 등 다양한 정보들이 있어 좋았습니다.이 책은 자료 구조에 대한 문제 풀이 능력을 더욱 향상시키고 싶으신 분들이 읽게 되다보니 크게 문제가 되진 않겠지만, 조금 더 재미있는 예시가 있으면 좋지 않았을까? 라는 생각이 들었습니다. 그만큼 실제 업무에 반영할 수 있는 부분이 많을 것이므로 호불호의 영역이 되겠단 생각도 드네요. 개인적으로 동적 프로그래밍 위주로 보았던 것 같고, 다른 다중 트리 등에 대해서는 참고만 하는 정도로 읽었습니다.중급 수준의 자료 구조를 다루는 파이썬 사용자분들께 추천드리며, 다른 언어를 쓰시더라도 파이썬에 대한 기초 지식 및 자료 구조에 대한 이해가 있으시다면 접근하시는데에 큰 문제는 없을 것으로 예상됩니다. ^^
이 책을 통해 알고리즘 해결 과정에 대한 이해를 할 수 있습니다. 매번 아래와 같은 과정을 통해 알고리즘을 해결합니다. 그렇기 때문에 다른 문제를 만나도 아래 과정처럼 알고리즘 해결을 할 수 있는 능력을 키울 수 있습니다.
1. 문제 설명
가장 먼저 해결해야할 문제를 설명합니다.
2. 제한사항 파악
문제에서 제안사항을 파악하고 도출합니다.
3. 아이디어
문제에 대한 설명과 파악한 제한사항을 이용하여 아이디어를 생각합니다. 가장 먼저는 단순한 아이디어를 생각해보고 그 다음엔 더 효율적인 아이디어를 생각해봅니다.
4. 구현
아이디어를 실제 코드로 구현해봅니다.
5. 테스트 케이스
다양한 테스트 케이스를 통해 제대로 동작하는 지 확인해봅니다.
- 다양한 문제 풀이
이 책에는 배열, 문자열, 연결 리스트, 스택과 재귀, 큐, 트리, 동적 프로그래밍, 정렬과 같은 큰 카테고리에 다양한 문제들을 제공하고 있습니다. 이를 통해 기본적인 알고리즘 해결 능력을 기를 수 있습니다.
- 파이썬
파이썬 코드를 통해 알고리즘 해결하는 방법을 제공합니다. 파이썬을 공부하고 싶거나 파이썬 언어로 알고리즘 공부를 하는 분들에게 좀 더 적합한 서적이 아닐까 생각합니다.
[총평]
좀 더 효율적인 개발을 위해서는 알고리즘과 자료구조를 이해하는 것은 굉장히 중요합니다. 그리고 실제 업무 영역에 있어서 내가 알고 있는 알고리즘과 자료구조를 적절한 곳에 적용하는 것도 굉장히 중요합니다. 그래서 지속적으로 공부하고 연습해야하는 것이 알고리즘과 자료구조가 아닐까 생각합니다. 이 책은 노트를 이용한 레이아웃을 통해 알로리즘과 자료구조를 이용한 문제 해결 방법을 제시하고 있습니다. 그리고 실제 문제 해결을 하는 방법을 과정을 통해 설명하고 있습니다. 알고리즘를 어떻게 해결해야하는지 막막한 분들이라면 이 책이 그 가려운 부분을 긁어줄 수 있는 대안이 되지 않을까 생각합니다. 그리고 파이썬을 통해 알고리즘을 해결하는 방법을 보여주고 있어 파이썬을 공부하려는 분들에게는 좀 더 도움이 되지 않을까 생각합니다.
최근 개발자 채용이 늘어나면서 덩달아 많은 관심을 받게된 컴퓨터 과학의 한 갈래는 단연 자료구조와 알고리즘일 것이다. 대부분의 기업에서 코딩 테스트를 여러가지 목적으로 필수적으로 진행하고 있기 때문에 테스트에서 활용하는 자료구조와 알고리즘은 취업 준비생 또는 이직을 준비하는 사람들에게 필수불가결한 내용이 되었다.
단순히 자료구조와 알고리즘에 대해서 다루는 것이 아니라 아예 코딩테스트를 타겟으로 출판된 책들도 다수 있다. 그러면 기존에 출판된 코딩테스트 대비 또는 자료구조/알고리즘 책과 본 도서의 차이는 무엇일까? 책에서 다루는 주제는 기존의 출판된 책들과 크게 다르지 않거나 오히려 책의 두께가 얇은 편이므로 일부 빠지는 내용도 있는 것으로 보인다. 물론 자주 출제되는 유형은 대부분 다루고 있으므로 그 부분에 대한 걱정은 하지 않아도 될 것이다. 가장 눈에 띄는 차이점은 아래와 같은 프로세스를 통해서 코딩 문제를 해결하는 루틴을 형성할 수 있다는 점이 이 책의 가장 큰 특장점이라고 생각된다.
프로그래밍을 하는 사람 중 일부는 종종 생각도 하기 전에 코드를 쓰려는 나쁜 습관이 있다 (내 얘기다). 이것은 굉장히 나쁜 습관이며 프로그래밍은 생각과 고민을 굉장히 많이하고 작성하기 시작해야한다. 알고리즘 문제 풀이는 서비스 코드에 비해서 단편적인 코드 작성을 하는 경우가 많으므로 이런 연습을 하기에는 최적의 조건으로 볼 수 있다. 특히 생각없이 문제를 푸는 경우 문제를 본다 -> 코딩을 한다 -> 채점을 하고 나서 시간/공간 복잡도를 생각해본다의 순서인데 책에서는 이것을 제한사항을 생각하고 시간/공간 복잡도를 고려해서 아이디어를 도출 후 코드를 작성하고 마지막으로 테스트까지 해보는 구조화된 루틴을 제공하고 있다.
문제의 제한사항은 매우매우 중요한 조건이지만 문제 풀이자들이 가끔 놓치는 경우가 많다. 특히 Integer의 범위 조건이나 정렬의 유무 등은 문제 풀이를 진행함에 있어서 매우 치명적으로 작용하는 경우가 있기 때문에 항상 미리 잘 정리 후 문제 풀이를 하는 것이 중요하다. 책에서는 해당 부분을 가장 먼저 진행하고 아이디어 도출을 시작한다
예제의 문제는 브루트 포스하게 푸는 아이디어로 충분히 해결가능하므로 다른 아이디어는 없지만 같은 문제라도 여러 가지 접근 방법이 가능할 수 있기 때문에 시간/공간 복잡도를 고려하여 사전에 문제 풀이를 설계하는 과정을 거치게된다
문제 풀이 설계 이후 그 때서야 비로소 코드를 작성한다. 코드는 사실 아이디어를 그저 옮기는 것이므로 앞에서 고민과 생각을 많이하고나면 크게 어렵지 않게 옮길 수 있을 것이다 (물론 코드 작성을 위한 언어의 문법 기본을 알고 있어야한다)
마지막으로 엣지 케이스를 놓치는 지 아닌 지에 대해서 테스트 케이스를 검토하며 루틴을 마치게된다.
우선 책이 그렇게 두껍지 않다. 자료구조/알고리즘 개론서는 두꺼운 경우가 많아 부담스러울 때가 있는데 그런 부분을 덜었다고 본다. 두껍지는 않지만 빈출되는 내용은 거의다 커버하고 있다. 특히 각 유형별로 비슷한 유형의 리트코드 등의 문제풀이 사이트들도 제공하므로 충분한 연습을 할 수 있을 것이다. 급하게 코딩 테스트나 이직 준비를 하는 사람들에게 간지러운 부분을 해결해줄 수 있는 책이라고 생각한다.
알고리즘은 영원히 내가 풀 수 없는 숙제 중 하나다. 그래서 입사 후 조금씩 알고리즘 공부를 하고 있다. 그런데 알고리즘에서 가장 유명한 책은 자바로 되어 있어서 참고할 수 없었다. 또한 재귀부터 시작되서 초반에 진입하는데 어려움이 있었다.
다행히도 이 책은 파이썬으로 되어 있었고, 난이도가 쉽게 되어 있어서 처음 알고리즘을 진입하기에는 쉬웠다. 풀어야하는 문제는 어떻게 접근하면 되는지, 시간 복잡도가 어떻게 되는지 가르쳐주고, 대부분의 문제가 도식화 되어 있어서 다른 문제에 응용할 수 있게 해주었다. 각 상황 단계별로 접근하면서 알고리즘 문제를 해결하면 응용할 수 있는 방법이 따로 생겼다.
처음 문제만 보고 풀 때는 시간이 엄청 걸렸었다. 하지만 접근 방법을 고려하면서 따라 풀다보니까, 시간이 단축되는 것을 느꼈다. 연습을 하다보니 차차 알고리즘이 재밌어지는 것을 느꼈다.
주로 코딩테스트는 자료구조, 알고리즘에 대한 기본적인 이해를 평가하기 위한 지표로 사용된다.
그만큼 알고리즘과 자료구조가 중요하다는 의미인데, 과거의 나를 떠올려보면 부끄럽게도 코딩하면서 알고리즘을 생각해본적은 없었다. 그러던 중 취업을 위해 채용공고들을 찾아보던 중 대부분의 회사에서 코딩테스트를 채용 과정의 일부로 사용하고 있다는 것을 알게되었다. 부랴부랴 자료구조 강의를 결제해서 듣기 시작했지만, 단순히 취업을 위한 공부라 재밌지도 않았고 강의는 들어놓고 문제에 손도 못대는 경우가 허다했다.
이렇게 어려운 알고리즘 공부는 대체 왜 해야하며 어떻게 해야 효과적일까??!!!!
매일 문제를 풀면서 들었던 이 질문에 대한 해답을 주는 책을 소개한다.
실제 개발자로 취업을 하게되면 현실세계의 문제들을 해결해야한다. 이럴때 알고리즘에 대한 기본 지식은 빛을 발하는데, 현실 문제에 대한 대략적인 접근방법뿐만 아니라 어떤 알고리즘과 어떤 자료구조를 사용해야할지 고민하게 되는 습관도 기를 수 있으며 동료의 코드를 리뷰해줄 때 더 좋은 제안을 할 수 있다는 것이다.
즉, 알고리즘에 대한 공부는 현실 문제들을 잘 헤쳐나갈 수 있는 방법을 찾게 해주는 열쇠같은 것이다.
운동으로 따지자면 모든 운동의 기초가 되는 근력운동이고, 요리로 따지자면 요리를 하려면 불을 다룰 줄 알아야하고 칼질을 할 수 있어야하는 것처럼 말이다.
(올바른 비유인지는 모르겠음..)
나는 자료구조와 알고리즘에 대한 강의도 수강해보고 책도 사서 읽어보고 했는데 이 책은 조금 색다른 방법으로 진행이 된다. 바로 노트 레이아웃을 이용한 문제풀이 접근 방법이다. 책 제목처럼 이 책은 직접 알고리즘 설계 캔버스(Algorithm Design Canvas)를 채워가면서 문제를 해결해나간다.
나는 이방법이 굉장히 마음에 들었다. 코딩테스트를 보다보면 이 문제에 어떤 알고리즘을 써야하는지 아이디어가 떠오르지 않아 난감했던 적이 많았는데 이렇게 손으로 적어두면 한 눈에 볼 수 있으니까 너무 좋다고 생각했다. 또 코드를 짜다가 '내가 지금 이걸 왜하고 있었더라?' 싶어서 다시 처음으로 돌아가지 않아도 되니까 시간낭비를 줄일 수 있었다.
책의 순서는 배열 / 문자열 / 연결리스트 / 스택과 재귀 / 큐 / 트리 / 동적 프로그래밍 / 정렬 순으로 이루어져 있다.
가장 중요한 자료구조들을 제대로 공부할 수 있다.
책의 구성은 일단 자료구조에 대한 기본적인 개념을 설명해준다. 스택이면 스택, 배열이면 배열에 대한 전반적인 지식을 소개해준다. 그림도 있어서 이해하기 쉽다. 파이썬을 다룰 줄 알지만 자료구조를 잘 모르는 사람들도 이해할 수 있도록 개념 설명이 매우 자세하다고 느꼈다.
기본적인 개념설명 이후 직접 파이썬으로 구현을 해본다.
이 책은 파이썬으로 진행되는 언어이므로 모든 자료구조들은 파이썬으로 구현된다.
구현 후 알고리즘 설계 캔버스 예시도 같이 보여준다.
코드에 대한 자세한 설명이 필요한 경우, 코드를 한 줄 한 줄 뜯어서 어떤 값이 리턴되는지, 어떻게 값들이 바뀌는지 알려준다. 코드에 대한 설명도 꽤 자세한 편이다. 설명과는 논외로 어려운 개념은 아무리 쉽게 설명해줘도 어렵다;;
자료구조에 대한 구현까지 끝나면 연습문제가 3-4개 정도 주어진다. 문제를 풀면서 개념을 소화하라는 차원에서 문제가 주어지는데 나의 경우 아직 알고리즘 초심자라 그런지 문제를 푸는데 오랜 시간이 걸렸다.
책으로 공부해보면서 알고리즘을 막 시작한 나에게 부담스럽거나 난이도가 너무 높지 않았다.
언어가 파이썬이라 익숙하기도 했고, 알고리즘 설계 캔버스로 구현해보니까 기억도 잘나고 복습하기에도 용이했다.
책의 두께도 385페이지로 별로 두껍지 않고 들고다니는데 무리가 없다.!
이 책으로 공부하고 알고리즘 사이트에서 문제 풀어보면서 코딩테스트 준비하면 지금보다 자신감이 좀 생기지 않을까 싶다.
<쓰면서 익히는 알고리즘과 자료구조>는 배열(Array), 문자열(String),연결 리스트(Linked List), 스택(Stack)과재귀(Recursion), 큐(Queue), 트리(Tree), 동적 프로그래밍(Dynamic Programming)과같은 다양한 자료구조와 알고리즘을 설명하고 노트 레이아웃 접근법으로 알고리즘 문제를 소개하고 풀이한다. 저자는‘알고리즘 문제 해결을 위해 가장 최적화된 해결책을 바로 제시하지 않고, 다양한 접근법을 고민해 보고 차근차근 단계별로 풀이하는 과정’을담았다고 한다.
저자는 소프트웨어 개발자로서 알고리즘의 출력값에 관심을 가졌을 뿐 어떻게 출력값을 만드는지 관심을 갖지않았다고 한다. 구글, 아마존, 페이스북 등 ‘IT업계 네임드 회사’에서 코딩 인터뷰를 한다는 것을 알고 알고리즘에 관심을 가졌고, 독학으로알고리즘 문제 풀이한 과정을 담아 이 책을 펴냈다고 한다.
알고리즘과 자료구조 학습을 통해 ‘시간 복잡도’와 ‘공간 복잡도’를 파악할수 있고, 어떤 개발을 하든 운영되는 프로그램의 자원을 효율적으로 활용하고 다양하고 빠른 해결방법을고민할 수 있다고 강조한다.
개발과정에서 현실적인 문제 해결을 위해 어떤 자료구조와 알고리즘을 써야 하는지고민하게 되는 좋은 습관이 생겼고, 다른 개발자들의 코드를 리뷰하는 과정에서 좋은 제안도 할 수 있는계기가 되었다.(8쪽)
알고리즘에 대해 공부하고 싶은데 어디서부터 어떻게 시작해야 할지 모르겠거나, 코딩 인터뷰를 준비하고 있는 분들에게는 실질적인 도움을 줄 수 있을 것 같다.
* 해당 도서는 출판사로부터 무상으로 제공받았으며, 제 주관에 따라 솔직하게 작성했습니다.
이 부분이 이 책이 다른 자료구조, 알고리즘 입문서에 비해 가장 도드라진 특징이라 볼 수 있다. 입문자들에게는 책에 담겨 있는 대부분의 내용이 새롭기 때문에 당장 코드를 작성하는 것에만 초점이 맞춰지는 일이 흔하다. 쓰면서 익히지 못하고 쓰기만 하게 되고, 개념을 익히는 것은 별개의 문제처럼 여겨지게 된다. 어떻게 접근할 것인지를 알고리즘 설계 컨버스를 이용해 먼저 생각해보는 시간을 갖게 해준다.
친절한 그림
아이디어 캔버스와 같은 맥락에서, 친절한 그림덕에 입문자들이 더 쉽게 이해할 수 있도록 했다.
이 책은 그림 하나만 두고 단계별 설명을 글로 길게 설명하지 않고, 그에 맞는 그림을 단계별로 배치하면서 이해도를 높인다. 이러한 친절함은 연결 리스트뿐만 아니라 다른 자료구조, 알고리즘에서도 볼 수 있어 입문자가 쉽게 이해할 수 있도록 해준다.
총평
책에서 알고리즘과 자료구조에 대해 직접 문제를 풀며 익숙해지게끔 했다.
입문자를 위해 많은 도표를 활용해서 그림을 통해 이해하기 쉽게 설명했다.
파이썬으로 입문자가 알고리즘 아이디어를 자연어에 가깝게 표현할 수 있도록 했다.
자료구조에 사전 지식이 있으면, 책의 난이도가 너무 쉽게 느껴질 수 있다.(알고리즘 파트도 마찬가지다.)
개인적으로는 다른 것들에 관심을 가지면서, 알고리즘은 많이 접하지 않았던터라, 많이 부족하다고 느끼고 있었기 때문에, 이 주제가 눈에 들어온 것 같다.
> 책에 대한 간단한 정보
제목처럼 알고리즘에 대한 책이다.
특히 순수한 자료구조를 중심으로 한 알고리즘 문제 해결에 대한 책이다.
코딩테스트를 비롯하여 다양한 사이트에 코딩관련 문제들이 많지만, 이 책은 컴퓨터공학을 전공한 사람이라면 알고있을 자료구조에 대한 내용을 다루고 있으며, 이것을 다시 상기시킴과 동시에 직접 구현하여 피부로 와 닿도록 도와주는 데 목적이 있다. 특히 구현에만 초점을 맞추었다기 보다는 그 풀이 과정 자체를 잘 설명해놓았다.
그리고, 알고리즘은 파이썬3를 통해 구현하였다.
> 인상깊은 부분들
당연히 여러 요소가 있었지만, 알고리즘 설계 캔버스를 중심으로 그 요소를 설명하고 있다는 것이 특징이었다.
마치, 우등생의 비법 노트를 보는 느낌이랄까.
그 비법 노트를 작성하는 방법 뿐 아니라, 그 과정에서 풀이 과정을 같이 학습해나가는 느낌마저 들게 하였다.
관련 문제를 그냥 풀어볼 수도 있지만, 그 문제를 제공하는 사이트를 직접 적어주어 풀어보기 쉽도록 하였다.
그래서, 해당 사이트에서 다른 언어로 문제를 풀어보는 것도 어렵지 않았다.
사이트에서는 다른 언어라고 하더라도 직접 실행 가능할 뿐 아니라, 오답까지 잘 체크해주기 때문이다.
문제를 직접 해결해보니, 정말 좋은 참조를 넣어놓았다는 생각이 더 강하게 들었다.
문제 해결방법에 대해 설명하는 부분에서는 도표를 매번 출연시켜서 설명하고 있다.
대학 때 알고리즘에 대한 이해를 돕기위해 칠판에서 자주 보았던 방식인데, 이러한 방식을 통해 스텝바이스텝으로 알고리즘에 대한 이해가 쉽게 되도록 도와주었다.
이 책의 핵심인 알고리즘 설계 캔버스를 중심으로 뒷 표지를 내세웠다. 책을 읽을수록 이유가 와 닿는 부분이다.
> 괜찮은 부분
1. 단계별로 문제해결을 설명하였다.
가장 먼저 문제 기술 및 설명을 하고 있다. 그리고나서 노트를 활용하여 문제 접근 및 풀이를 제공하며, 제한 사항 및 아이디어를 기록하고, 그것을 코드로 풀어내고 있다. 이러한 일련의 과정을 따라가다보면 당연히 문제해결은 이렇게 하는 방식이 좋다고 여겨지고, 이 방식대로 훈련하게 된다. 이 방식에도 동의하는 바이기 때문에 충분히 좋았던 부분이다.
2. 해당 문제를 비슷하게 제공하는 사이트를 알려줌으로 인해 직접 풀어볼 수 있는 기회를 제공한다.
한가지 사이트 뿐 아니라 다양한 사이트에 대한 참조를 링크로 제공함으로, 직접 실습하는 데 도움을 주었다. 아니었다면, 그냥 머릿속으로 이해만 하고 넘어갔을 문제들을 직접 풀 수 있도록 도전해보도록 했다는 것이다. 개인적으로도 leetcode를 이용하여 문제를 풀어보았는데, 여기서 말하는 풀이를 볼 때도 있었지만, 먼저 문제를 풀어보고 이 해설을 보았을때 더 와 닿았던 부분이다.
3. 배열, 문자열, 연결리스트, 스택, 재귀 등 필수 주제를 다뤄주었다.
너무 뻔한 주제들이고, 요즘에는 API로 제공되기 때문에 아마도 개발자들이라면 직접 구현할 일이 없는 알고리즘일지도 모른다. 그래서 오히려 개념은 알고있지만, 직접 구현하라고 하면 구현하기는 어려울 수 있는 주제들인데, 이에대한 이해를 높이기 위해서는 구현하는 방법을 알고있어야 한다고 생각한다. 그런 관점에서 이러한 개념을 활용한 문제를 다룬것이 좋았으며, 순수한 구현 뿐 아니라, 응용 문제를 다룸으로써 실용적이기까지 하다.
4. 그림/도표를 적절히 삽입하여 이해를 돕고 있다.
그림/도표를 필요하다고 생각되는 곳 마다 잘 삽입하였다. 배열의 구조를 다룰 때에도 몇 번째 배열에 어떤 값이 들어갔으며, 해당 루프를 수행할 때마다 어떤 변화가 일어나는지도 알려주고 있다. IP주소에 관한 문제에 대해서 다룰 땐, 각 주소 값의 범위를 기재한 부분도 있었다. 이렇듯 이해를 도울 수 있도록 최대한 그림/도표를 적절히 활용한 부분이 인상적이었다.
> 아쉬운 부분
1. 실제로 문제를 풀어볼 수 있는 참고 사이트를 나중에 보여주어 아쉽다.
스텝바이스텝으로 문제 해결을 해나가도록 돕고 있다고 하였는데, 참고 사이트는 마지막에 언급되어있다. 이 문제를 스스로 풀어보고 그 다음에 설명을 들으면 좀 더 강하게 와 닿는다고 생각되는 측면에서는 순서가 굳이 뒤에 있었어야만 했나 하는 생각이 들었다. 계속 뒤부터 확인하느라 아쉬웠다.
2. 이해를 돕기 위한 서술이 많은 편인데, 단락을 적절히 끊어주면 가독성이 올라갈 것 같다.
도표를 많이 삽입했으나, 특성상 서술하는 부분도 많았다. 그래서 어떤 부분은 10줄이 넘도록 설명이 이어지는 단락도 존재한다. 그래서 이렇게 말이 길어지는 경우 적절하게 단락이나 항목을 끊어서 알려준다면, 가독성이 올라가고 이해도 쉽게 할 수 있지 않았을까 생각되었다.
3. 알고리즘 설계 캔버스에서 테스트 칸은 사용하지 않았다.
알고리즘 설계 캔버스라는 테이블은 이 책에서 가장 핵심적인 노트를 표현하는 부분이다. 이 부분에 각각의 칸이 다른 역할을 보여주고 있는데, 이 중 테스트 칸은 별도로 기록에 사용된 것을 보지는 못했다. 그렇다면 굳이 필요한가 생각이 들고, 필요하다면 활용하는 부분도 같이 보여주어야 납득할 수 있을 것 같다.
사실 집에 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를 항상 언급하는 것이 마음에 들었다.
ㅡ 무작정 예제나 코드를 제시하지 않고, '아이디어'를 상세하게 검토하게끔 하는 구성이 좋았다.
ㅡ 옳은 방향으로 충분히 생각해볼 수 있도록 생각의 방향을 친절하게 정리해준다.
어떤 책으로 공부하든지 습득은 본인의 몫이지만, 잘 정리된 책은 학습효율을 높인다. 특히 새로운 것이나 어색한 것을 공부하려고 할 때 거의 책의 흐름을 따라가며 지식을 얻는 편이다. 이 책을 프리뷰해보니 마음에 꽤 들어서 내가 아끼는 책꽂이에 둘 것이다.
기본적인 자료구조인 배열, 연결리스트, 스택, 큐부터 알고리즘 문제로 자주 등장하는 문자열, 다이나믹 프로그래밍 등이 수록되어 있다.
이 책의 특징
이 책은 일반적인 코딩테스트를 준비하기 위해서가 아닌 알고리즘의 생각법과 접근법을 제시해준다. 이 책만의 장점이라고도 할 수 있는 노트 레이아웃을 사용해 문제의 아이디어를 제시하고, 시간복잡도와 공간복잡도를 생각하며 문제를 풀 수 있게끔 자연스럽게 유도해준다. 그러한 점에 있어서 일반적인 코딩테스트 뿐만 아니라 면접에서 접할 수 있는 알고리즘 손 코딩에도 대비할 수 있게 된다.
문제는 외국에서 가장 유명한 사이트 중 하나인 릿코드 문제를 활용하는데, 문제들을 릿코드에 들어가서 직접 풀어볼 수도 있다.
최근 가장 많이 사용되는 코딩테스트 언어 중 하나인 파이썬을 사용한다는 것도 이 책의 장점이라고 볼 수 있다.
마지막으로, 알고리즘 노트 방법을 위한 사이트 추천과, 알고리즘 학습을 위한 사이트 소개로 마무리가 되는데 이 사이트 또한 알고리즘을 풀면서 유용하게 참고할 수 있어 책을 다 읽고 난 뒤에도 추가적인 학습을 유도하고 있다.
추천 독자
개인적으로 파이썬을 사용하며 코딩테스트를 준비하는 사람이고, 또한 손코딩 시험을 볼 수도 있는 면접이 두려운 사람이라면 한번쯤 읽어보고 방법을 터득하면 좋을 것 같다. 이 책에 나와있는 노트 레이아웃 방법을 손코딩 시험에서 활용하면 좋을 것 같다는 생각을 했다.
마치며
한빛미디어에서 파이썬 알고리즘 책으로 유명한 나동빈님의 이것이 코딩테스트다 책과 더불어 이 책도 알고리즘을 익히기에 정말 좋은 책이라고 생각을 했다. 이것이 코딩테스트다 책을 다 읽고 무엇을 풀지 고민하는 사람이 있다면 과감하게 이 책을 보며 릿코드를 풀어보기를 적극 추천한다!
마치 '어려운 수학' 같아 응용력을 사용해 기본 이론에서 정답으로 가는 길을 펼쳐야 하는것과
문제로 다다르기 위해 거쳐야 하는 과정이 너무나 많다는 것입니다.
지금까진 '실전에서는 잘 안쓰였다' 라는 핑계로
대충 하거나 나중에 한다고 미룰 수 있었지만
'데이터 분석' 분야가 중요해지면서
'정교'하고 '정확'함을 요구하는 일이 많아졌습니다.
왜이렇게 장황하게 얘기하고 있냐구요?
저도 데이터 분석을 하고 싶어서 계속 두드리는 분야기 때문이죠...
오늘은 따끈따끈한 알고리즘과 자료구조를 배울 수 있는 한빛미디어의 신작을 소개할까 합니다.
[쓰면서 익히는 알고리즘과 자료구조]
- 쓰면서 익힌다?
'지은이의 말'에 보면 시간이 많이 소요되지만 다른 사람들의 풀이법을 이해가 될 때까지 확인하며 다양한 방법을 익히고 그 다양한 방법들로 문제를 해결하는 과정에 성취감을 느꼈다고 한다.
사실 처음에 '쓰면서 익힌다'라는 제목을 봤을때는 초중고에서 수학을 배울때 처럼 공식이 무의식적으로 툭 튀어나올때까지 외우라는 말인가... 하며 실망했지만 지은이의 말을 읽고나니 이미 해결책을 알고 있는데 다른 해결책을 받아들인다는 것이 굉장히 어려운 일이겠구나 싶었고, 이걸 또 활용하기 위해 내것으로 만든다 라는 뜻이라는것을 느꼈다.
- 그래서 어떻게 쓰면서 익힐껀데?
보통 대학에서 슈도코드(pseudocode, 의사코드)라는걸 활용해서 코드를 쓰고, 순서도라는걸 활용해서 그림을 그린다.
이 책에서 지은이는 'Hiredintech' 사이트에서 제공하는 알고리즘 설계 캔버스 라는 노트 레이아웃을 활용하면 실수를 줄일 수 있어서 추천하며 책에서 적극 활용한다.
- 알고리즘, 어떻게 접근해야해?
알고리즘 하면 빼놓을 수 없는 '복잡도'를 간단히 설명한다. 문제를 해결하는데 얼마나 최적화될 수 있는지를 설명하는 이 '복잡도' 라는 녀석은 빅 오 표기법으로 많이 나타내는데, 아래와 같이 간단한 식으로 초보자도 익힐 수 있을만큼의 쉬운 설명을 한다.
- 이 책의 장점을 꼽자면?
1. 정말 쉽게 설명하려고 노력한 흔적이 보인다.
아래 사진을 보면 알겠지만 알고리즘은 반복되는 프로그램의 실행 값을 구하는 일이 많기 때문에 머리속으로만 계산한다는것은 매우 어려운 일이다. 보통 변수가 증가하거나 감소하는 수를 써가며 문제를 푸는것이 일반적인데 이를 아래처럼 그림으로 쉽게 설명함으로써 더욱 이해가 잘되게끔 한다.
2. 지은이의 말에 나온것처럼 해결책으로 가는 가장 빠른길이 아닌 다양한 길을 생각하게 만든다.
'이 문제의 정답은 뭘까요? 정답은 A입니다.' 같은 진행방식은 수많은 문제집에서 보았다. 이 책은 '이 문제는 어떻게 접근하면 좋을까?'를 고민하게 만들어 함께 차근차근 풀어나가는 느낌을 받게 한다.
3. 책에서 활용되는 언어, 파이썬
이 책에서 의사표현 코드로 사용되는 파이썬은 파이썬을 깊게 알지 못해도 변수명과 흐름을 보고 어느정도 이해할 수 있는 난이도로 표현되어 있어 언어가 그리 큰 장벽은 되지 않는다.
4. 이 책에 사용되는 기술명에 대한 간단명료한 설명
한가지 예를 들어보자면 가장 첫 장의 '배열' 에 대해 구구절절 설명하는것이 아닌 '연속적인 메모리 공간에 저장된 아이템의 집합을 표현하는 자료구조' 라고 간단명료하게 정의를 내린다. 기술에 대한 입문서가 아니기 때문에 설명에 필요한 부분을 심플하게 풀어낸 것이 매력적이다.
- 이 책의 아쉬운점을 꼽자면?
1. 아쉬운점이라기보단 아무것도 모르는 초보들에게 추전하지 않는다.
위 장점4에서 언급한것처럼 구구절절 설명하지 않기 때문에 '프로그래밍'을 조금이라도 해본 사람들이거나 자료구조에서 사용되는 단어에 대해 어느정도 아는 사람이 최소 타겟이 되지 않을까 싶다.
2. 책 설명에서 나왔던 노트 레이아웃 양식을 굳이 맞출 필요가 있었을까?
책에서 설명한 노트 레이아웃 양식을 보면 한쪽에 설명을 하면 한쪽은 사용되지 않는다(예를들어 좌측이 사용되면 우측은 비어있는 형태가 대부분).
책의 특성상 공간 활용이 어렵기 때문이라 생각되는데... 굳이 한정된 공간을 갖는 책에서 노트 양식을 맞추기 위해 노력해야 했을까 싶다. 사용 예만 보여주고 빈 공간을 좀 더 잘 활용했으면 좋았을 것 같다.
- 그래서...
너무 어려운 세계... 알고리즘과 자료구조 역시 정답은 여러번 해보는(쓰면서 익히는) 수밖에 없을것 같다.
대기업 채용 테스트에 '최적화'가 차이를 가르는 '키'인만큼 알고리즘과 자료구조의 중요성은 날이 갈 수록 더욱 커지고 있다. 이 한권으로 뚝딱! 하는건 어렵겠지만 최소한 알고리즘을 공부하고 싶다! 라는 사람이 있다면 이 책을 추천하고 싶다.
오랜만에 번역서가 아닌 국내 개발자님이 직접 쓰신 서적을 만났습니다. 표지는 깔끔하게 흑백으로 색을 구성하고 제목이 부각되도록 큼직하게 상단과 중간에 자리 잡고 있습니다. 주위에는 알고리즘을 구성하는 함수와 테스트 케이스로 보이는 코드로 장식하고 있네요. 파이썬 언어를 사용할 것이라는 것을 짐작할 수 있게 해 줍니다.
작가는 10년 이상 경험을 하신 베테랑 개발자입니다. 리눅스 커널 쪽에 분석과 수정 작업을 하실 정도이니 알고리즘이나 자료 구조 쪽에 깊은 이해력을 갖고 있으심은 분명합니다.
서문에서는 알고리즘이 필요한 이유와 알고리즘을 고안할 때 사용할 수 있는 노트 레이아웃이라는 방법을 소개하고 있습니다. 노트 레이아웃은 다른 책과 구별되는 이 책의 특징이라고 볼 수 있을 듯 합니다. 특정 기능을 구상할 때 머리 속으로 대충 생각하고 손부터 움직이는 경우가 많습니다. 이렇게 노트로 기록을 하게 되면, 생각도 정리를 잘 할 수 있고 코딩을 할 때도 일목요연하게 잘 진행할 수 있을 것 같습니다. 물론, 코딩부터 하게 되는 급한 마음을 잘 다스릴 수 있어야 하지만 말입니다.
서문에서는 7개의 챕터가 있다고 소개하고 있지만, 실제로는 8개의 챕터로 구성되어 있습니다. 아마 집필 당시에는 7개로 구성했으나, 이후에 챕터가 추가된 것이 아닌가 싶습니다. 마지막 장이 정렬 알고리즘인데, 알고리즘을 설명할 때 보통 가장 먼저 등장하는 부분입니다. 정렬이 알고리즘에 기본이 되는 개념이기 때문인 것 같습니다. 그러나 이 부분이 뒤에 가 있어서 책의 구성 관점에서 조금 아쉬운 부분이라고 생각합니다.
차례 부분을 보게 되면, 각 소제목 란에 '문제 기술 및 설명', '노트 레이아웃을 이용한 문제 접근 및 풀이', '관련 문제 사이트' 가 계속해서 반복되고 있습니다. 이러한 반복되는 내용은 책의 구성 부분에 간단히 설명을 하고, 차례 부분에서는 제외를 하는 것이 더 좋지 않았나 하는 생각을 해 봅니다. 프로그래밍의 규칙 중에도 DRY (Don't Repeat Yourself)가 있을 만큼 개발에서도 반복되는 작업은 가능한 제거해주는 것을 권장하듯이 말입니다. 그리고, 8장은 이러한 진행 방식에서 벗어난 챕터로 구성되어 있어, 다른 챕터와 이질감을 느끼게끔 하기도 합니다. 아무래도 8장은 원래는 Appendix 에 처음이 포함되어 있다가 본 내용으로 들어오지 않았나 하는 짐작이 됩니다.
각 장마다 도입부에 필요한 개념에 대해서 그림을 잘 활용해서 설명을 하고, 부분적으로 필요한 코드들을 보여줘서 실제 구현할 알고리즘에 대한 이해력을 높여주고 있습니다. 배열, 문자열, 연결 리스트까지는 설명도 풍부하고, 조금은 배경 지식을 가지고 있어서 그런지 술술 잘 읽혀진다는 느낌이 들었습니다. 그러나, 재귀부분과 동적 프로그래밍 부분은 상당히 난해하다는 생각을 했습니다. 조금 더 지면을 할애해서 개념에 대한 더 자세하고 많은 설명이 있었으면 하는 아쉬움이 있습니다. 이 부분은 알고리즘 문제도 어렵기도 하고, 개념 이해도 명확히 되지 않아서 다른 자료를 좀 더 찾아봐야 할 것 같습니다.
스택을 이용해서 알고리즘을 설명하는 부분은 그림도 잘 와 닿고, 설명도 절차적이고 상세해서 이해하기가 쉬웠습니다. 풀이하는 문제도 흥미로운 주제이기도 해서 재미있게 읽어 나갈 수 있습니다.
전체적으로 이 책에 대해서 알고리즘 풀이집같은 느낌을 받았습니다. 알고리즘이 쉽게 이해하기가 쉬운 분야인 만큼 작가 분이 설명을 가능한한 자세히 해 주시려고 이 책에 심혈을 기울였음 알 수 있는 부분이 자주 보였습니다. 그러나 조금은 앞 쪽보다 뒤 쪽에 있는 챕터 쪽에 설명이 더 많았으면 하는 아쉬움은 있습니다. 뒤로 갈수록 점점 더 개념이 어려워지는 경향이 있기 때문입니다. 요즘 개발자 입사 시험에는 코딩 테스트가 자리 잡고 있는 것 같습니다. 이것을 준비하는 예비 취업자들에겐 좋은 참고서가 될 것 같습니다. 이 책이 중요시하고 있는 타겟이 이 부분들이기도 하겠지요?
최근 개발자의 몸값이 올라가면서 많은 사람들이 개발 공부를 시작했다. 개발자는 생각보다 학력이 많이 중요하지 않고, 얼마나 컴퓨터를 이해하고, 잘 활용하느냐에 따라 실력이 갈리기때문에 비전공자들도 쉽게 시작하는 추세이다. 개발 공부를 한다고 하면 가장 먼저 공부해야할 것은 바로 "알고리즘 과 자료구조"이다. 수학문제를 푸는데 공식을 모르고 풀면 비효율적이고 힘들게 풀 수 밖에 없다 이게 바로 우리가 알고리즘을 배워야하는 이유이다. 이번에 한빛 미디어에서 새로운 알고리즘 공부책이 나오고 받아서 읽게 되었다.
2.메인 내용 -
사실 목차는 다른 알고리즘 책들과 큰 차이가 없었다. 정렬, 큐, 배열 등의 필수적인 알고리즘 들을 설명하고 있다. 그리고 아래 사진과 같이 알고리즘을 설명해준다. 그냥 무작정 알고리즘의 원리를 설명하는 것이 아닌, 어떤 제약사항이 있고, 왜 이런 알고리즘을 써야되는지 논리적으로 스스로 생각할 수 있도록 도와준다. 코드는 대부분 비슷하니 넘어가겠다.
3.나의 생각 -
사실 알고리즘 공부 책의 대부분 목차는 비슷해서 어떻게 어려운 알고리즘을 잘 풀어서 쉽게 정리하느냐가 중요하다. 이 책은 위에서 말한 아이디어 노트를 작성하는 방법을 소개해준다. 사실 이렇게 까지 제약사항이나 어떻게 이 생각을 했는지 정리해둔 책은 잘 보지 못했다. 그리고 자칫하면 헷갈릴 수도 있는 시간 복잡도와 공간 복잡도도 잘 보여줘서 편했다. 코드의 질은 말할 것도 없고, 부가적인 설명도 한빛미디어식으로 좋은 손그림과 함께 잘 설명이 되어있다.
4.마무리 -
마무리를 지어보자면, 현재 코딩테스트를 위해 많은 사람들이 알고리즘을 공부하고 있고 이 분야 책은 권위있는 책들이 이미 많아서 레드오션이라고 생각한다. 하지만, 그렇다고 새로운 책이 나오지 않는다면 그것또한 문제이다. 앞으로도 계속 문제 트렌트, 코딩 트렌드는 바뀌는데 이 책은 가장 최신의 파이썬 트렌드를 잘 반영한 것 같다. 그래서 이 책 한권만 볼 것이 아니라, 유명한 권위있는 책 한권과 병행해서 보면 가장 베스트인 것 같다.
알고리즘을 그냥 네임드 회사의 코딩 인터뷰&테스트를 위한 용도로만 생각 했었다. 하지만 현업 개발을 하다보면 ‘시간 복잡도’, ‘공간 복잡도’ 같은 개념을 알고 프로그래밍하는 차이는 나중에 엄청나게 차이가 나게 된다. 개발과정에서 현실적인 문제 해결을 위해 어떤 자료구조와 알고리즘을 써야 하는지 고민하게 되는 좋은 습관이 생겼고, 다른 개발자들의 코드를 리뷰 하는 과정에서 좋은 제안도 할수 있을 것이다.
노트 레이아웃을 이용한 알고리즘 문제 풀이 접근 방법
문제 분석과 함께 어떤 알고리즘과 자료구조가 적절한지 파악한다
문제로 부터 요구사항과 제한 사항을 수집한다.
어떤 식으로 접근할지 다양한 아이디어를 제시한다.
코딩을 통합개발환경 도움 없이 화이트 보드나 종이에 연습한다.
시간/공간 복잡도를 고려한다어떤 테스트 케이스를 통과 하는지에 대해 고려한다.
노트 레이아웃 소개
알고리즘 문제를 접하고 바로 코딩을 시작하게 되면 종종 제한사항을 잘못 인지하거나 고려하지 못한 테스트를 보는 경우가 생긴다. 하지만 이 레이아웃을 활용하게 되면 제한 사항과 테스트를 미리 적을 수 있어 이러한 실수를 줄일 수 있다.
Constraints(범위, 제한 사항)
알고리즘 문제를 풀다 보면 기본 변수 타입의 범위를 벗어나는 경우가 있다. 예를 들어 정수형이 가질수 있는 값보다 크거나 작아지는 경우, 배열이나 리스트 범위를 벗어나는 경우, 문자열의 길이를 제한하는 경우, 추가적인 메모리 할당을 제한하는 경우 등 다양하게 나타 날 수 있는데 이러한 제한사항을 미리 파악해야 한다.
문자열, 배열 그리고 숫자
배열은 얼마나 많은 요소들을 가질수 있는가?
문자열의 경우는 길이가 얼마나 길어질 수 있는가?
배열에서 요소들이 유일한 값으로 채워져 있는지, 중복을 허용하는지 확인 하자.
반환값
문제의 반환값은 어떤 형태이고 어떤 값을 원하는지 정확히 파악하자. 만약에 배열에서 증가하는 최장 공통부분 수열을 구한다고 하자. 이때 반환해야 하는 것은 길이 인지 시작 인덱스인지 혹은 둘다 인지 확인할 필요가 있다.
Ideas(문제 풀이 접근 방법)
보통 문제 풀이 방식은 1~3개 정도다. 예를 들어, 배열에서 특정 값을 찾는다면 배열의 처음부터 하나씩 확인하며 해당 값을 찾아갈 수도 있고, 정렬된 배열이라면 이진 탐색을 진행할 수도 있다. 이런 식으로 어떤 알고리즘 혹은 자료구조를 활용할지 접근해보는 연습을 해보자.
Complexity(복잡도)
자신이 생각한 알고리즘이나 자료구조를 사용하여 문제를 해결하는데 얼마나 시간이 걸리지, 얼마나 많은 공간을 사용해야 하는지에 대한 지표를 제공해주기 때문에 얼마나 최적화되어 만들어 졌는지 쉽게 인지할 수 있다.
Code(코드 작성)
아이디어에 해당하는 내용을 코드를 작성한다. 본인이 사용하는 언어로 개발도구에 의존하지 않고 작성하는 연습을 해보자. 또한 자신이 생각하는 알고리즘에 대한 구현은 어떻게 해야 할지 고민을 해야 한다.
Test Cases(테스트 케이스 검토)
가장 기본적인 입력에 대한 검증이 가장 중요하다. 우선 본인이 구현한 코드로 문제에서 제공하는 입력 해결을 해야 한다.
책의 구성
자료구조와 알고리즘을 분류하고, 각 자료구조와 알고리즘에 해당하는 문제를 분석하고 문제 풀이를 진행 하는 방식으로 구성되어 있다.
자료구조 및 알고리즘 설명
다양한 자료구조와 알고리즘의 기본적인 설명을 기술한다. 코드는 파이썬으로 만들어졌으며, 라이브러리 호출이나 사용법을 설명이 잘되어 있다. 각 챕터별 자료구조 기분으로 코딩 문제 풀이를 파이썬으로 설명하고 있다.
이책에서 언급한 자료구조를 중심으로 학습한다면 온라인 코딩 테스트 사이트의 쉬운,보통 수준의 문제를 어느 정도 해결이 가능 할것이며, 코딩 테스트 및 코딩 인터뷰를 준비하는데 크게 무리가 없을것이라 생각한다.
책의 내용은 기본적인 자료구조와 알고리즘에 대해 문제를 풀이하는 과정을 직접 노트 레이아웃을 작성해가면서 공부할 수 있게 잘 구성이 되어있는 것 같다
얇은 책이고 많은 문제가 수록된 것은 아니지만 노트 레이아웃을 기록하며 효율적으로 학습하고 기록하고 문제를 풀이하는 습관을 들여 이 책에 수록된 문제 이외에 별도로 코딩 인터뷰 사이트에서 문제를 풀이하면서도 계속해서 이 책에서 공부한 방법대로 공부하면서 기록하는 것을 권장하고 있다
저자의 노하우가 녹아들어 코딩 인터뷰를 처음 부터 어떻게 준비해야될지 모르거나 이미 공부했었어도 어떻게 자신이 한번 공부 했던 것을 다시 떠올리기 쉽도록 기록할 수 있는지에 대해 배울 수 있다
그동안은 그냥 문제풀이와 답과 간단한 과정을 블로그에 기록했었는데 이 책의 방법대로 한번 시도를 해보는 것도 좋은 방법중에 하나 인 것 같다
코딩인터뷰를 효율적으로 준비하는 자신의 방법을 찾아나가는 하나의 좋은 방법중에 하나 인 것 같다