책소개
직접 써보며 이해하는 가장 효율적인 알고리즘 문제 해결 과정 알고리즘과 자료구조를 가장 효율적으로 학습할 수 있는 방법은 무엇일까? 바로 노트에 직접 알고리즘 문제 해결 과정을 써보면서 이해하는 것이다. 이 책은 ‘알고리즘 설계 캔버스’ 작성을 통한 문제 해결 과정을 보여준다. ‘알고리즘 설계 캔버스’는 제한사항, 아이디어, 복잡도, 코드, 테스트 영역으로 구성된 한 페이지짜리 노트로 일련의 알고리즘적 사고 과정을 보여주는 최적의 학습 도구이다.각 장은 다양한 알고리즘과 자료구조(배열, 문자열, 연결 리스트, 스택, 재귀, 큐, 트리, 동적 프로그래밍, 정렬 등)의 기본적인 내용을 소개한 뒤, 관련 문제를 ‘알고리즘 설계 캔버스’의 항목별 내용을 쓰면서 풀어본다. 이 책을 통해 ‘알고리즘 설계 캔버스’를 직접 작성하면서 알고리즘과 자료구조의 이해를 넓혀 개발 역량을 키우고 코딩 인터뷰까지 대비해보자.
저자소개
12년간 임베디드 리눅스 커널 개발, 윈도우 애플리케이션 개발, 리얼타임 운영체제에서의 BSP 개발, 백엔드 개발 등 다양한 영역에서의 개발 경험이 있고 항상 기본에 충실하고자 노력하는 엔지니어다. 꾸준히 알고리즘과 운영체제에 대해 공부하고 있으며, 오픈 소스 리눅스 커널 분석 및 수정 활동에 참여하고 있다.
목차
들어가며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 알고리즘 학습을 위한 사이트 소개