품목정보
출간일 | 2020년 09월 28일 |
---|---|
쪽수, 무게, 크기 | 764쪽 | 183*235*32mm |
ISBN13 | 9791165212957 |
ISBN10 | 1165212951 |
출간일 | 2020년 09월 28일 |
---|---|
쪽수, 무게, 크기 | 764쪽 | 183*235*32mm |
ISBN13 | 9791165212957 |
ISBN10 | 1165212951 |
코딩 인터뷰를 준비하는 사람을 대상으로 한다. 앞부분에서는 여러 가지 자료 구조와 알고리즘에 대한 복잡도를 분석하고 뒷부분에서는 다양한 알고리즘 기법을 다룬다. 또한, 각 주제에 맞춰 문제와 해결책을 제시하며, 연습 문제를 통해 완전히 이해하고 있는지 확인하게 한다. C 언어로 해결책을 제시하지만, C 언어가 친숙하지 않더라도 구조체, 함수, 배열, 포인터, 재귀의 개념을 안다면 읽는 데 무리가 없다. |
1부 코딩 인터뷰를 위한 기본 개념 익히기 1장 알고리즘 분석 _1.1 점근적 분석 _1.2 알고리즘 복잡도 분석 _1.3 시간 복잡도 예제 _1.4 마스터 정리 _1.5 배열 기반 문제 _1.6 재귀 함수 2장 알고리즘 문제를 풀기 위한 접근법 _2.1 제약 조건 분석 _2.2 아이디어 구상 _2.3 복잡도 계산 _2.4 코딩 _2.5 테스트 _2.6 코딩 인터뷰 예시 _2.7 정리 3장 추상 자료형과 자료 구조 _3.1 추상 자료형 _3.2 자료 구조 _3.3 배열 _3.4 연결 리스트 _3.5 스택 _3.6 큐 _3.7 트리 _3.8 힙 _3.9 해시 테이블 _3.10 딕셔너리와 심볼 테이블 _3.11 그래프 _3.12 정렬 _3.13 정리 4장 정렬 _4.1 정렬 유형 _4.2 정렬 알고리즘 비교 _4.3 정렬 문제 5장 검색 _5.1 왜 검색일까 _5.2 검색 알고리즘의 종류 _5.3 검색 문제 2부 자료 구조 6장 연결 리스트 _6.1 연결 리스트의 기본 _6.2 연결 리스트의 종류 _6.3 연결 리스트 문제 7장 스택 _7.1 스택의 추상 자료형 _7.2 시스템 스택과 함수 호출 _7.3 배열로 스택 구현하기 _7.4 연결 리스트로 스택 구현하기 _7.5 스택 문제 8장 큐 _8.1 큐의 추상 자료형 _8.2 배열로 큐 구현하기 _8.3 연결 리스트로 큐 구현하기 _8.4 큐 문제 9장 트리 _9.1 트리의 기본 _9.2 이진 트리 _9.3 이진 트리의 유형 _9.4 이진 트리 문제 _9.5 이진 탐색 트리 _9.6 이진 탐색 트리 문제 _9.7 이진 트리의 확장 10장 힙 _10.1 힙의 유형 _10.2 힙의 추상 자료형 연산 _10.3 힙 연산 _10.4 힙 정렬하기 _10.5 힙을 사용하는 곳 _10.6 힙 문제 11장 해시 테이블 _11.1 해시 테이블 _11.2 충돌 해결 기법 _11.3 해싱 문제 12장 그래프 _12.1 그래프 용어 _12.2 그래프 구현 방법 _12.3 그래프 순회 _12.4 그래프 문제 3부 고급 알고리즘 13장 문자열 알고리즘 _13.1 문자열 일치 _13.2 심볼 테이블과 딕셔너리 _13.3 문자열 문제 14장 알고리즘 설계 기법 _14.1 무차별 대입 알고리즘 _14.2 탐욕 알고리즘 _14.3 분할 정복과 부분 정복 _14.4 동적 계획법 _14.5 변환 정복 _14.6 백트래킹 _14.7 분기 한정 _14.8 A* 알고리즘 _14.9 정리 15장 무차별 대입 알고리즘 _15.1 버블 정렬 _15.2 선택 정렬 _15.3 순차 검색 _15.4 pow(a, n) 계산하기 _15.5 문자열 일치 _15.6 가장 가까운 두 점의 무차별 대입 알고리즘 _15.7 볼록 껍질 문제 _15.8 완전 탐색 _15.9 정리 16장 탐욕 알고리즘 _16.1 동전 교환 문제 _16.2 최소 신장 트리 _16.3 단일 출발 최단 경로의 데이크스트라 알고리즘 _16.4 최적 인코딩을 위한 허프만 트리 _16.5 작업 선택 문제 _16.6 배낭 문제 17장 분할 정복과 부분 정복 _17.1 일반 분할 정복의 반복 _17.2 병합 정렬 _17.3 퀵 정렬 _17.4 외부 정렬 _17.5 이진 검색 _17.6 제곱 함수 _17.7 볼록 껍질 _17.8 가장 가까운 두 점 18장 동적 계획법 _18.1 피보나치 수 _18.2 조립 라인 계획 _18.3 최장 증가 부분 수열 _18.4 최장 바이토닉 부분 수열 _18.5 연쇄 행렬 곱셈 _18.6 최장 공통 부분 수열 _18.7 동전 교환 문제 19장 백트래킹 _19.1 N 여왕 말 문제 _19.2 하노이의 탑 20장 복잡도 이론 _20.1 결정 문제 _20.2 복잡도 클래스 _20.3 정리 |
최근 들어서 “코딩 인터뷰” 를 보는 회사들이 많이 있습니다. 그리고 이를 준비할 수 있는 인터넷 사이트들도 늘어나고 있습니다. 재미있는건 이런 걸 공부할 수 있는 사이트들이, 해당 플랫폼도 제공하는 경우가 많다는 거죠.
국내에서는 프르그래머스(https://programmers.co.kr/), 백준(https://www.acmicpc.net/) 등이 유명하고, 해외에서는 leetcode(https://leetcode.com/), HackerRank(https://www.hackerrank.com/) 등이 굉장히 유명한 사이트입니다.
제목에서 알다시피, 해당 책은 C로 알고리즘 테스트를 준비하는 책입니다. 개인적으로, 알고리즘 테스트는 c/c++/java 등으로 치르는 것보다는 python 등의 좀 더 코딩하기 편한 언어를 사용하는 것을 더 좋아하긴합니다.(흑, 갑자기 떠오르는 c로 해서 탈락했던 아픈 기억이… 그렇다고 해서 python으로 해서 붙었느냐고 물어보신다면…. 쩝…쩝…쩝…)
제가 알고리즘 테스트를 많이 풀어본것도 아니고, 그런 시험을 치는 회사에 붙어본 경험이 많지도 않지만…(떨어진 경험은… 많…) 한가지 재미있는 것은, 제가 위에서 코딩 인터뷰는 python 등의 언어를 쓰는 걸 권장한다고 말하긴 하지만, 자신이 자주 사용하는 언어에서 문제를 잘 풀어보면 확실히 유리하다는 것입니다.
그런데, 단순히 문제를 보고 답을 외우면, 쉽게 풀 수 있을가요? 이 책을 보면서 leetcode 문제를 다시 한문제를 풀어봤는데, 세번 실패하고 네번째에 성공했습니다. 그런데, 아주 재미있는 사실은… 그 전에 시도한 기록이 있고, 그 때는 한번에 풀었던…(이봐… 점점 퇴화도고 있는건가!!!) 이게 easy 난이도의 문제였는데, 반대로 그 다음에 푼 medium 난이도는 한번에 쉽게 풀었습니다.(누구냐!!! 넌!!!)
장점
“실전 대비 C 알고리즘 인터뷰” 를 읽으면서 가장 좋았던 부분은… 문제를 다양한 방법으로 푼다는 것입니다. 최소 두 가지의 풀이법을 보여주고, 보통은 세 가지의 풀이법을 보여주고 있습니다. 그리고 거기에 대해 항상 시간복잡도와 공간복잡도를 보여주고 있다는 점입니다. 흔히들 문제를 풀면서 착각하는 경우가, 시간복잡도가 가장 중요하다고 생각하는데, 사실 중요한 부분은, “요구사항” 을 맞추는 것입니다.
예를 들어, 문제에 따라, 시간 복잡도 보다, 공간복잡도를 중요시 하는 요구 사항이 있을 수 있고, 어떨때는, 이 두 가지 보다, 데이터의 기존 순서를 유지하는게 중요할 수도 있습니다.(실제 실무에서 이런 상황이 요구되는 경우가 있습니다.) 그래서 문제를 하나의 방법으로 풀었다고 해서 좋은 것이 아니라, 다양한 방법으로 풀어보는 것이 중요합니다.
책을 보다보면, 코딩 테스트 같은 종류의 문제도 있고, 용량이 줄어들면, 실제 스택의 크기를 두 배로 줄여라, 용량이 늘어나면 두 배로 늘려라 등의 그냥 일반적으로 코딩하다가 생기는 문제같은 것들에 대한것들도 꽤 있습니다.(이 방법은 실제로 여러군데서 사용하기도 합니다.)
단점
엄청난 단점은 아니지만, 문제 자체가 막 독특하다기 보다는, 구성 자체는, 다른 알고리즘 관련 책들과 마찬가지로 다양한 자료구조와 알고리즘을 다 다루고 있습니다.(정렬/트리/그래프/DP/문자열 등), 좀 어려운 문제(기반 지식이 필요한 문제)들은 관련 지식들이 많이 설명이 되어있고, 그렇지 않은 문제들은 그냥 해답만 있기도 합니다.(쉬운 문제들은 그냥 시간/공간 복잡도나 여러가지 해법 없이 그냥 단번에 풀이만 있는 경우도 뒤에는 종종 잇습니다.)
결론
워낙 문제가 많아서 문제를 전부 풀지도 못하고, 몇몇 문제들 밖에 풀어보지는 못했지만, 문제들이 평소에 본인이 생각하지 못하던 부분들을 계속 건들이게 해주는게 좋은듯 합니다.
언어와 상관없이 그 내용을 잘 이해하는 것이 좋기 때문에, 잘 이해하면 큰 도움이 될듯합니다.
c언어로 알고리즘 공부하면서 코딩테스트까지 빡세게 준비한다면 이 책을 추천해주고 싶습니다.
외서라서 그런지, 바로 본론으로 들어갑니다. 코딩테스트를 위한 알고리즘에 대한 기본 개념들을 책의 초장부터 바로 설명합니다. 문법 설명은 일절 없고, 바로 복잡도에 대한 설명을 하면서 간단한 문제들을 풀면서 복잡도에 대해 설명합니다. 예를 들어, 최대-최소 배열 문제에서 2가지 해결책을 제시하면서 복잡도의 크기가 어떻게 되는지 이야기해줍니다.
2장에서는 알고리즘 문제를 풀기 위한 접근법을 다룹니다. 문제를 어떻게 간단하게 만드고, 어떤 자료구조가 적합한 지 생각해야 함을 얘기해줍니다 또, 복잡도를 어떻게 계산해야 할 지 초안을 그렸다면 이제 코딩에 들어갑니다. 3장에서는 자료 구조들에 대해 간단하게 설명합니다. 자료 구조는 별도로 다른 책으로 공부 좀 해오시는 게 낫다고 봅니다.
이후에는 정렬, 검색, 연결 리스트 등 굉장히 상세하게 다룹니다. 그리고 코딩테스트 초보라면 결코 쉽지 않습니다. 코드를 이해하고 다시 풀어보고 다른 방법을 사용해보고 한다면 정말 이 책을 최소 1달 이상은 붙잡아야 되는 책이라고 보여집니다. c 문법과 자료구조는 어느 정도 학교에서 공부했거나 다른 책이나 인강으로 독학한 사람이라면 이 책을 봐도 좋을 것 같습니다. 그게 아니라면, 이 책은 봐선 안됩니다. c언어로 알고리즘 능력을 키우고 싶은 모든 분들에게 추천해주고 싶습니다. 기본 알고리즘에 굉장히 충실한 책입니다.
개발자로의 이직을 위해 코딩테스트를 준비하는 사람입니다.
코딩테스트를 주먹구구식으로 문제를 많이 풀다가 이 책을 읽었습니다. 전공자이고 코딩을 좀 했으니, 문제를 많이 풀면 될거라 생각했지만.. 큰 오산이었습니다!
코딩테스트는 접근 방법이 많이 달랐습니다. 시간제한(크기제한), 접근방법 등을 알고 풀어야 더 잘 풀수 있었습니다.
이런 면에서 실전대비 C알고리즘 인터뷰 라는 책을 잘 선택했다고 생각이 듭니다.
코딩테스트(알고리즘) 접근방식 부터 풀이, 그리고 이 후 면접대비까지..
개발자로서 취업을 위해 코딩테스트를 준비한다면 강추하는 책 입니다!!