들어가며
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 Su
알고리즘 공부 어떻게 해야 할까?
배경지식은 충분히 공부했는데, 왜 알고리즘 문제에 접근조차 못 할까?
알고리즘 문제 해결 능력의 핵심은 ‘알고리즘적 사고력’입니다. 알고리즘적 사고력을 키우기 위한 가장 좋은 방법은 알고리즘 문제를 풀 때 여러 전략을 고민하고 해결 과정을 직접 노트에 써보는 것입니다.
한 페이지짜리 ‘알고리즘 설계 캔버스’는 이런 프로세스를 쓰기 좋은 학습 도구입니다. 제한사항, 아이디어, 복잡도, 코드, 테스트 영역으로 구성된 ‘알고리즘 설계 캔버스’는 일련의 알고리즘적 사고 과정을 명확하게 보여줍니다. 이 책은 ‘알고리즘 설계 캔버스’의 요소별 내용을 완성해가며 문제를 풀이합니다. 직접 ‘알고리즘 설계 캔버스’를 작성하면서 알고리즘 문제 해결 과정을 단계별로 따라가봅시다.
알고리즘 설계 캔버스 구성 요소
● 제한사항(Constraints: 알고리즘 문제의 요구와 제한사항을 발견하고 기록하는 영역
● 아이디어(Ideas: 문제를 해결할 수 있는 1~3개 정도의 접근 방법을 고려하는 영역
● 복잡도(Complexities: 생각한 아이디어의 시간과 공간 복잡도를 추정하는 영역
● 코드(Codes: 아이디어 영역에서 논의한 내용을 바탕으로 구현할 가치가 있다고 생각한 방법을 코드로 작성하는 영역
● 테스트(Test cases: 구현된 코드의 테스트 케이스를 알아보고 코드 테스트를 진행하는 영역
● 이 책의 코드는 파이썬 기반으로 작성되었습니다.
● 예제 소스: github.com/daeseokyoun/learn-algorithm-by-writing
베타리더의 말
허민 _한국외국어대학교 정보지원처
다른 알고리즘 서적과 달리 몇 가지 차별화된 전략이 인상 깊었습니다. 노트 레이아웃(알고리즘 설계 캔버스으로 사고 과정을 적어보고 비주얼라이저를 활용해 중간 단계를 눈으로 보며, 구현 과정의 상세한 도식화로 이해하는 과정 덕분에 알고리즘이라는 매운 양파 껍질을 하나 더 벗겨낸 느낌을 받았습니다.
이준희