Do it! 자료구조와 함께 배우는 알고리즘 입문 : 파이썬 편
사실 파이썬으로 이렇게 배우는 건 반칙이다. 자료구조건 알고리즘이건 말이다. C언어나 JAVA로 같은 내용을 배우는 것보다 100000만배 쉽다. 문법이 간결해서 핵심 개념을 이해하기가 용이하기 때문이다.이 책은 파이썬 구조 이해부터 시작해서 검색, 정렬, 스택/큐, 재귀, 연결 리스트, 이진검색트리에 이르기까지 다양한 자료구조와 알고리즘을 다룬다. 사실 자료구조와 알고리즘 모두, 수학에 기반을 두고 있지만 실제 이해는 논리의 영역에 가깝다. 이 책에서는 설명과 함께 다양한 개념을 제시하고, 이를 즉시 활용할 수 있도록 실습 예제까지 같이 포함시켰다. 해보면서 동시에 배우면 확실히 유리하다. 몇몇 예제는 실제 업무적인 코딩과도 밀접하게 연관시킬 수 있어서, 실용성까지도 잡은 느낌이다.저자의 설명 방식은 친절하면서 동시에 꼼꼼하다. 사실 이 책은 같은 내용이 C 언어와 JAVA로도 출간되었다. 그래서 내용 구성은 당연히 좋을 것이라 생각했지만, 파이썬 자체에 대해서는 큰 기대를 하지 않았었는데, 생각보다 굉장히 잘 씌여져 있었다. 맨 앞장부터 파이썬의 언어적 구조에 대한 개념을 정리한다. immutable, mutable, iterator 등에 대한 설명이 체계적으로 되어 있다. 웬만한 파이썬 초급서보다도 훨씬 잘 정리되어 있다고 생각했다.저자가 반복적으로 주장하듯이, 자료구조와 알고리즘은 같이 배우는게 맞다. 그래야 뜬구름 잡는 개념 타령이 아니라, 실제적으로 와닿게 배울 수 있다. 책을 읽다보니, 학창시절에 자료구조 한 학기 & 알고리즘 한 학기 이렇게 각각 따로 배웠고, 그럼에도 피를 토하면서 겨우겨우 암기했던 기억이 났다. 그 암기 내용은 기말고사 답안지 제출과 동시에 모조리 제로가 되었기 때문에, 이렇게 좋은 책으로 공부하는 친구들을 생각하면 왠지 조금 억울(?)한 것도 같다.P.S. 많은 장점이 있는 이 책에서 가장 좋았던 것은 모든 예제가 f-string 을 사용한다는 점이다. 파이썬 버전 3.6부터 추가된 print(f"{변수}") 형태이다. 뭔가 모던한 느낌으로, 저자가 파이썬에 대해서 친숙하다는 인상을 받았다.
기업 코딩 테스트와 모든 시험의 기초가 되는 ‘자료구조와 알고리즘’!
213개의 그림과 136개의 파이썬 실전 예제로 빠르고! 쉽게! 배운다.
자료구조와 알고리즘은 국내외 IT 기업의 면접과 코딩 테스트에서 중요하게 생각하는 역량이다. 자료구조와 알고리즘은 단순히 개념만 이해한다고 해서 바로 실전에 사용하기는 힘들다. 하나하나 자신의 손으로 코딩하고 결과를 확인해 보면서 컴퓨터가 어떻게 데이터를 저장하고 문제를 해결하는지 직접 경험해야 실전에서 사용할 수 있습니다. Do it! 자료구조와 함께 배우는 알고리즘 입문 : 파이썬 편 은 213개의 그림과 함께 저자의 친절한 설명으로 개념을 쉽게 이해할 수 있다. 이를 바탕으로 136개의 파이썬 실습 예제로 직접 코딩하며 개발 능력을 키울 수 있다.
-----------------
01장 알고리즘 기초
-----------------
__01-1 알고리즘이란?
____세 정수의 최댓값 구하기
____조건문과 분기
____순서도 기호 살펴보기
__01-2 반복하는 알고리즘
____1부터 n까지 정수의 합 구하기
____연속하는 정수의 합을 구하기 위해 값 정렬하기
____반복 과정에서 조건 판단하기 1
____반복 과정에서 조건 판단하기 2
____반복 과정에서 조건 판단하기 3
____양수만 입력받기
____직사각형 넓이로 변의 길이 구하기
____반복문 건너뛰기와 여러 범위 스캔하기
____다중 루프 알아보기
-----------------
02장 기본 자료구조와 배열
-----------------
__02-1 자료구조와 배열
____배열 개념 알아보기
____리스트와 튜플 알아보기
____인덱스로 원소에 접근하기
____슬라이스식으로 원소에 접근하기
____자료구조의 개념 알아보기
__02-2 배열이란?
____배열 원소의 최댓값 구하기
____배열 원소의 최댓값을 구하는 함수 구현하기
____주석과 자료형 힌트
____재사용할 수 있는 모듈 작성하기
____모듈 테스트하기
____배열 원소를 역순으로 정렬하기
____기수 변환하기(n진수 구하기)
____소수 나열하기
-----------------
03장 검색 알고리즘
-----------------
__03-1 검색 알고리즘이란?
____검색과 키
____검색의 종류
__03-2 선형 검색
____선형 검색
____보초법
__03-3 이진 검색
____이진 검색
____복잡도
__03-4 해시법
____정렬된 배열에서 원소 추가하기
____해시법
____해시 충돌
____체인법
____오픈 주소법
-----------------
04장 스택과 큐
-----------------
__04-1 스택이란?
____스택 알아보기
____스택 구현하기
____스택 프로그램 만들기
__04-2 큐란?
____큐 알아보기
____배열로 큐 구현하기
____링 버퍼로 큐 구현하기
____링 버퍼로 큐 프로그램 만들기
-----------------
05장 재귀 알고리즘
-----------------
__05-1 재귀 알고리즘의 기본
____재귀 알아보기
____팩토리얼 알아보기
____유클리드 호제법 알아보기
__05-2 재귀 알고리즘 분석
____재귀 알고리즘의 2가지 분석 방법
____재귀 알고리즘의 비재귀적 표현
__05-3 하노이의 탑
____하노이의 탑 알아보기
__05-4 8퀸 문제
____8퀸 문제 알아보기
____퀸 배치하기
____분기 작업으로 문제 해결하기
____한정 작업과 분기 한정법
____8퀸 문제 해결 프로그램 만들기
-----------------
06장 정렬 알고리즘
-----------------
__06-1 정렬 알고리즘
____정렬이란?
__06-2 버블 정렬
____버블 정렬 알아보기
____셰이커 정렬 알아보기
__06-3 단순 선택 정렬
____단순 선택 정렬 알아보기
__06-4 단순 삽입 정렬
____단순 삽입 정렬 알아보기
__06-5 셸 정렬
____단순 삽입 정렬의 문제
____셸 정렬 알아보기
__06-6 퀵 정렬
____퀵 정렬 알아보기
____배열을 두 그룹으로 나누기
____퀵 정렬 만들기
____비재귀적인 퀵 정렬 만들기
____피벗 선택하기
____퀵 정렬의 시간 복잡도
__06-7 병합 정렬
____정렬을 마친 배열의 병합
____병합 정렬 만들기
__06-8 힙 정렬
____힙 정렬 알아보기
____힙 정렬의 특징
____루트를 삭제한 힙의 재구성
____힙 정렬 알고리즘 알아보기
____배열을 힙으로 만들기
____힙 정렬의 시간 복잡도
__06-9 도수 정렬
____도수 정렬 알아보기
-----------------
07장 문자열 검색
-----------------
__07-1 브루트 포스법
____문자열 검색이란?
____브루트 포스법 알아보기
__07-2 KMP법
____KMP법 알아보기
__07-3 보이어·무어법
____보이어·무어법 알아보기
____문자열 검색 알고리즘의 시간 복잡도
-----------------
08장 리스트
-----------------
__08-1 연결 리스트
____연결 리스트 알아보기
____배열로 연결 리스트 만들기
__08-2 포인터를 이용한 연결 리스트
____포인터로 연결 리스트 만들기
____포인터로 연결 리스트 프로그램 만들기
__08-3 커서를 이용한 연결 리스트
____커서로 연결 리스트 만들기
____배열 안에 비어 있는 원소 처리하기
____프리 리스트
____커서로 연결 리스트 프로그램 만들기
__08-4 원형 이중 연결 리스트
____원형 리스트 알아보기
____이중 연결 리스트
____원형 이중 연결 리스트
____원형 이중 연결 리스트 만들기
____원형 이중 연결 리스트 프로그램 만들기
-----------------
09장 트리
-----------------
__09-1 트리 구조
____트리의 구조와 관련 용어
____순서 트리와 무순서 트리
____순서 트리의 검색
__09-2 이진 트리와 이진 검색 트리
____이진 트리 알아보기
____완전 이진 트리 알아보기
____이진 검색 트리 알아보기
____이진 검색 트리 만들기
____이진 검색 트리 프로그램 만들기
찾아보기