품목정보
출간일 | 2020년 12월 08일 |
---|---|
쪽수, 무게, 크기 | 552쪽 | 1049g | 183*235*22mm |
ISBN13 | 9791165213794 |
ISBN10 | 1165213796 |
출간일 | 2020년 12월 08일 |
---|---|
쪽수, 무게, 크기 | 552쪽 | 1049g | 183*235*22mm |
ISBN13 | 9791165213794 |
ISBN10 | 1165213796 |
67개 문제 풀이로 익히는 C++ 자료 구조와 알고리즘! 코딩 테스트 준비 및 최신 C++ 문법으로 알고리즘을 학습하자! C++ 자료 구조부터 그리디 알고리즘, 분할 정복 알고리즘, 그래프 알고리즘, 동적 계획법과 같은 다양한 알고리즘을 설명한다. 또한, 전통적인 자료 구조와 C++ STL 클래스 구현 사이의 관계를 설명해 주어진 문제에 가장 적합한 자료 구조를 선택할 수 있도록 도와준다. 이론을 익힌 후 44개 연습 문제와 23개 실습 문제로 직접 코딩해보며 체계적으로 학습할 수 있게 구성되어 있다. 코딩 테스트를 준비하는 취업 준비생과 최신 C++ 문법으로 알고리즘을 새로 공부하려는 사람들에게 추천한다. |
1장 리스트, 스택, 큐 1.1 들어가며 1.2 연속된 자료 구조와 연결된 자료 구조 __1.2.1 연속된 자료 구조 __1.2.2 연결된 자료 구조 __1.2.3 비교 __1.2.4 C 스타일 배열의 제약 사항 1.3 std::array __1.3.1 연습 문제 1: 동적 크기 배열 구현하기 __1.3.2 연습 문제 2: 빠르고 범용적인 데이터 저장 컨테이너 만들기 1.4 std::vector __1.4.1 std::vector - 가변 크기 배열 __1.4.2 std::vector 할당자 1.5 std::forward_list __1.5.1 std::forward_list에서 원소 삽입과 삭제 __1.5.2 std::forward_list의 기타 멤버 함수 __1.5.3 연습 문제 3: 연결 리스트에서 remove_if() 함수를 이용한 조건부 원소 삭제 1.6 반복자 __1.6.1 연습 문제 4: 다양한 반복자에서 이동하기 __1.6.2 연습 문제 5: 기본적인 사용자 정의 컨테이너 만들기 __1.6.3 실습 문제 1: 음악 재생 목록 구현하기 1.7 std::list __1.7.1 std::list 멤버 함수 __1.7.2 연습 문제 6: std::list의 삽입 또는 삭제 함수 사용하기 __1.7.3 양방향 반복자 __1.7.4 반복자 무효화 __1.7.5 실습 문제 2: 카드 게임 시뮬레이션 1.8 std::deque __1.8.1 덱의 구조 1.9 컨테이너 어댑터 __1.9.1 std::stack __1.9.2 std::queue __1.9.3 std::priority_queue __1.9.4 어댑터 반복자 1.10 벤치마킹 __1.10.1 실습 문제 3: 사무실 공유 프린터의 인쇄 대기 목록 시뮬레이션 1.11 나가며 2장 트리, 힙, 그래프 2.1 들어가며 2.2 비선형 문제 __2.2.1 계층적 문제 __2.2.2 순환 종속성 2.3 트리: 상하 반전된 형태 __2.3.1 연습 문제 7: 조직도 구조 만들기 __2.3.2 트리 순회 __2.3.3 연습 문제 8: 레벨 순서 순회 구현하기 2.4 다양한 트리 구조 __2.4.1 이진 검색 트리 __2.4.2 트리 연산의 시간 복잡도 __2.4.3 연습 문제 9: BST 구현하기 __2.4.4 균형 트리 __2.4.5 N-항 트리 __2.4.6 실습 문제 4: 파일 시스템 자료 구조 만들기 2.5 힙 __2.5.1 힙 연산 __2.5.2 연습 문제 10: 중앙값 구하기 __2.5.3 실습 문제 5: 힙을 이용한 데이터 리스트 병합 2.6 그래프 __2.6.1 인접 행렬로 그래프 표현하기 __2.6.2 연습 문제 11: 그래프를 구성하고 인접 행렬로 표현하기 __2.6.3 인접 리스트로 그래프 표현하기 __2.6.4 연습 문제 12: 그래프를 구성하고 인접 리스트로 표현하기 2.7 나가며 3장 해시 테이블과 블룸 필터 3.1 들어가며 3.2 해시 테이블 __3.2.1 해싱 __3.2.2 연습 문제 13: 정수 값을 저장하는 간단한 사전 3.3 해시 테이블에서 충돌 __3.3.1 체이닝 __3.3.2 연습 문제 14: 체이닝을 사용하는 해시 테이블 __3.3.3 열린 주소 지정 __3.3.4 뻐꾸기 해싱 __3.3.5 연습 문제 15: 뻐꾸기 해싱 3.4 C++ 해시 테이블 __3.4.1 연습 문제 16: STL에서 제공하는 해시 테이블 __3.4.2 실습 문제 6: 긴 URL을 짧은 URL로 매핑하기 3.5 블룸 필터 __3.5.1 연습 문제 17: 블룸 필터 만들기 __3.5.2 실습 문제 7: 이메일 주소 중복 검사 3.6 나가며 4장 분할 정복 4.1 들어가며 4.2 이진 검색 __4.2.1 연습 문제 18: 이진 검색 구현 및 성능 평가 __4.2.2 실습 문제 8: 예방 접종 4.3 분할 정복 이해하기 4.4 분할 정복을 이용한 정렬 알고리즘 __4.4.1 병합 정렬 __4.4.2 연습 문제 19: 병합 정렬 __4.4.3 퀵 정렬 __4.4.4 연습 문제 20: 퀵 정렬 __4.4.5 실습 문제 9: 부분 정렬 __4.4.6 선형 시간 선택 __4.4.7 연습 문제 21: 선형 시간 선택 4.5 분할 정복 기법과 C++ 표준 라이브러리 함수 4.6 맵리듀스: 더 높은 추상화 레벨의 분할 정복 기법 __4.6.1 맵과 리듀스 추상화 __4.6.2 연습 문제 22: C++ 표준 라이브러리를 이용하여 맵과 리듀스 구현하기 __4.6.3 맵리듀스 프레임워크를 이용한 부분 통합 __4.6.4 연습 문제 23: 맵리듀스를 사용하여 소수 확인하기 __4.6.5 실습 문제 10: 맵리듀스를 이용하여 워드카운트 구현하기 4.7 나가며 5장 그리디 알고리즘 5.1 들어가며 5.2 기본적인 그리디 알고리즘 __5.2.1 최단 작업 우선 스케줄링 __5.2.2 연습 문제 24: 최단 작업 우선 스케줄링 5.3 배낭 문제 __5.3.1 0-1 배낭 문제 __5.3.2 분할 가능 배낭 문제 __5.3.3 연습 문제 25: 분할 가능 배낭 문제 __5.3.4 실습 문제 11: 작업 스케줄링 문제 __5.3.5 그리디 알고리즘의 요구 조건 __5.3.6 최소 신장 트리 문제 __5.3.7 디스조인트-셋 자료 구조 __5.3.8 연습 문제 26: 크루스칼 MST 알고리즘 5.4 그래프 컬러링 __5.4.1 연습 문제 27: 그리디 그래프 컬러링 __5.4.2 실습 문제 12: 웰시-포웰 알고리즘 5.5 나가며 6장 그래프 알고리즘 I 6.1 들어가며 6.2 그래프 순회 문제 __6.2.1 너비 우선 탐색 __6.2.2 연습 문제 28: BFS 구현하기 __6.2.3 깊이 우선 탐색 __6.2.4 연습 문제 29: DFS 구현하기 __6.2.5 실습 문제 13: 이분 그래프 판별하기 6.3 프림의 최소 신장 트리 알고리즘 __6.3.1 연습 문제 30: 프림 알고리즘 구현하기 6.4 다익스트라 최단 경로 알고리즘 __6.4.1 연습 문제 31: 다익스트라 알고리즘 구현하기 __6.4.2 실습 문제 14: 뉴욕에서 최단 경로 찾기 6.5 나가며 7장 그래프 알고리즘 II 7.1 들어가며 7.2 최단 경로 문제 다시 살펴보기 7.3 벨만-포드 알고리즘 __7.3.1 연습 문제 32: 벨만-포드 알고리즘 구현하기 7.4 벨만-포드 알고리즘과 음수 가중치 사이클 __7.4.1 연습 문제 33: 음수 가중치 사이클 찾기 __7.4.2 실습 문제 15: 욕심쟁이 로봇 7.5 존슨 알고리즘 __7.5.1 연습 문제 34: 존슨 알고리즘 구현하기 __7.5.2 실습 문제 16: 무작위 그래프 통계 7.6 강한 연결 요소 __7.6.1 방향 그래프와 무방향 그래프에서 연결성 7.7 코사라주 알고리즘 __7.7.1 연습 문제 35: 코사라주 알고리즘 구현하기 __7.7.2 실습 문제 17: 미로-순간이동 게임 7.8 적절한 방법 선택하기 7.9 나가며 8장 동적 계획법 I 8.1 들어가며 8.2 동적 계획법이란? 8.3 메모이제이션: 하향식 접근 방법 8.4 타뷸레이션: 상향식 접근 방법 8.5 부분집합의 합 문제 __8.5.1 1단계: 동적 계획법 필요조건 분석하기 __8.5.2 2단계: 기저 조건과 상태 정의하기 __8.5.3 2-(a)단계: 전수 조사 __8.5.4 연습 문제 36: 전수 조사 방식으로 부분집합의 합 문제 풀기 __8.5.5 2-(b)단계: 최적화 적용하기 - 백트래킹 __8.5.6 연습 문제 37: 백트래킹을 사용하여 부분집합의 합 문제 풀기 __8.5.7 3단계: 메모이제이션 __8.5.8 연습 문제 38: 메모이제이션을 이용하여 부분집합의 합 문제 풀기 __8.5.9 4단계: 타뷸레이션 __8.5.10 연습 문제 39: 타뷸레이션을 이용하여 부분집합의 합 문제 풀기 __8.5.11 실습 문제 18: 여행 경로 8.6 문자열과 시퀀스에 대한 동적 계획법 __8.6.1 최장 공통 부분 시퀀스 문제 __8.6.2 연습 문제 40: 전수 조사 방식으로 최장 공통 부분 시퀀스 문제 풀기 __8.6.3 최적화 첫 단계: 최적 부분 구조 찾기 __8.6.4 실습 문제 19: 메모이제이션을 이용하여 최장 공통 부분 시퀀스 찾기 __8.6.5? 하향식에서 상향식으로 바꾸기: 메모이제이션 방식을 타뷸레이션 방식으로 바꾸기 __8.6.6 실습 문제 20: 타뷸레이션을 이용하여 최장 공통 부분 시퀀스 찾기 8.7 실습 문제 21: 멜로디 순열 8.8 나가며 9장 동적 계획법 II 9.1 들어가며 9.2 P와 NP 9.3 부분집합의 합 문제 다시 보기 9.4 배낭 문제 __9.4.1 0-1 배낭 문제 - 부분집합의 합 문제 확장하기 __9.4.2 연습 문제 41: 0-1 배낭 문제 __9.4.3 무한 개수 배낭 문제 __9.4.4 상태 공간 축소 __9.4.5 연습 문제 42: 무한 개수 배낭 문제 __9.4.6 실습 문제 22: 최대 이익 9.5 그래프와 동적 계획법 __9.5.1 벨만-포드 알고리즘 다시 보기 __9.5.2 동적 계획법으로 최단 경로 문제 다루기 __9.5.3 연습 문제 43: 단일 시작 최단 경로(메모이제이션) __9.5.4 모든 쌍 최단 경로 __9.5.5 플로이드-워셜 알고리즘 __9.5.6 연습 문제 44: 플로이드-워셜 알고리즘 구현하기 __9.5.7 실습 문제 23: 도로 건설 9.6 나가며 부록 실습 문제 풀이 |
요즘 실용 알고리즘 서적은 Python이 대세이긴 하지만, 흔치 않은 C++ 책입니다. 게다가 C++ 스타일은 모던 C++ 스타일입니다. 소스를 보면 코딩 인터뷰나 문제 풀이 알고리즘 구현할때 굳이 temlate< > 를 써야되나 싶기도 하지만, template 연습한다는 마음으로 보고 있습니다.
설명도 잘되어 있는 편이고요, 굳이 코딩 테스트를 준비한다기 보다는 C++로 알고리즘을 구현한다는 의미로 받아드리면 좋을 것 같습니다.
최근 대다수의 국내 유명 IT 대기업에서 채용절차에 코딩 테스트를 적극적으로 도입함에 따라 시중에 다양한 코딩 테스트 관련 서적들을 볼 수 있는데, 본 서적은 근래에는 보기드문 C++을 이용한 자료구조 및 알고리즘을 다루는 책입니다. 단순히 코딩 테스트 언어로 C++을 사용하는 정도가 아니라 C++ 전문 서적이라고 생각될 정도로 STL, 템플릿을 본격적으로 심도있게 다루고 있습니다. 사실 원제인 C++ Data Structures and Algorithm Design Principles 를 생각하면 한국어판의 제목이 불필요한 기대를 하게 만드는 요소가 있다고 생각되고, 왜 원 제목 그대로 출판하지 않았는지 조금 아쉬운 부분이기도 합니다.
책의 대상 독자 항목에 C++14 표준에 익숙하다고 적어놓은 만큼, 언어에 대한 기본적인 내용은 전혀 다루지 않고 최신 C++문법과 템플릿 메타프로그래밍을 가차없이 전개하고 있어 익숙하지 않은 분이라면 어려움을 느낄 수 있을것 같습니다. 그래도 최근 시중의 알고리즘 및 코딩테스트 서적이 파이썬 같은 고급 언어 위주로 쓰여진 것이 대부분이라 모던 C++로 자료구조와 알고리즘을 다루는 흔치 않은 서적인 만큼 C++ 로 자료구조와 알고리즘에 대해 다루는 것에 관심이 있거나 필요했던 분이라면 아주 가뭄 속의 단비 같은 책이 될 거라 생각됩니다. 특히 단순 설명에 그치지 않고 다양한 연습 문제와 실습 문제를 제공하고 있어 한국어판 제목 대로 코딩 테스트를 준비하는 데에도 실질적인 도움이 될 거라 생각됩니다. 다만 C++에 대한 충분한 지식과 경험이 없는 분이라면 참고할 다른 C++ 서적을 같이 보는 것을 추천합니다.
코딩테스트를 위해 가장 많이 준비하는 언어는 무엇일까?
출처: http://www.codingworldnews.com/news/articleView.html?idxno=2061
압도적으로 C++이 44%를 차지하고 있고, 2위로는 파이썬이 차지하고 있다. C++은 최근의 코딩테스트가 기업에서 도입되면서 많이 쓰인 다기보단 예전 미국에서부터 개발자를 채용하기 위해 많이 사용해온 언어이다. 또한 각종 올림피아드 대회, 코딩대회에서도 많이 쓰여왔다. 또한 C++은 각 시스템의 핵심적 모듈기능을 많이 담당해오고 있기 때문에, 단순 코딩테스트를 목적 보단 학교에서 배운 자료 C++ 자료 구조부터 그리디 알고리즘, 분할 정복 알고리즘, 그래프 알고리즘, 동적 계획법과 같은 다양한 알고리즘을 설명한다.
자료 구조와 C++ STL 클래스 구현 사이의 관계를 설명해 주어진 문제에 가장 적합한 자료 구조를 선택할 수 있도록 도와준다. 챕터 별로 그림을 통한 설명도 잘 되어있고, 이론을 익힌 후 44개 연습 문제와 23개 실습 문제로 직접 코딩해보며 체계적으로 학습할 수 있게 구성되어 있다.
길벗 출판사에서 운영하는 github 사이트( https://github.com/gilbutITbook/080239 ) 에 챕터별 예제소스와 실전문제 소스가 공유되어 있어서 각자의 개발환경에 맞추어 다운받거나 셋팅해서 step by step으로 확인 가능하다.
근데 이 경우 직접 프로젝트(vsc 2019기준)를 구성하여 소스를 돌려봐야하는데, 역자의 github사이트에 visual studio 2019 기준에 맞추어 생성한 개발환경도 구성 가능하다. ( https://github.com/sunkyoo/CPP-Data-Structures-and-Algorithms )
완전 C++에 대해 모르는 초보자를 대상으로는 접근하기 어렵다고 생각한다. 코딩 테스트를 준비하는 취업 준비생과 최신 C++ 문법으로 알고리즘을 새로 공부하려는 사람들에게 추천한다. 어느정도 기본 개념을 알아야 한다고 생각하고, 디버깅해보면서 공부하기에 좋은 내용이라고 생각했다.
출처: https://gopae02.tistory.com/156 [bluish wolf]