이것이 자료구조+알고리즘이다 with C 언어
Description
자료구조+알고리즘의 개념부터 실습까지
포기 없이 즐겁게 배우자!
자료구조와 알고리즘은 IT 기업의 면접과 코딩 테스트 통과를 위한 필수 역량입니다. 알고리즘을 배워두면 단순히 취업뿐 아니라 더 좋은 개발자가 되는 데 큰 도움이 됩니다. 하지만 자료구조와 알고리즘은 배우기 어려우며 심지어 재미도 없다 보니 많은 개발자가 중도에 학습을 포기합니다. 『이것이 자료구조+알고리즘이다』는 독자가 마지막 페이지까지 읽도록 하는 것에 목표를 두었습니다.
처음 배우는 사람의 눈높이에 맞춰 리스트부터 백트래킹까지 자주 사용되는 자료구조와 알고리즘 개념을 위트 넘치는 이야기로 쉽게 설명합니다. 보기만 해도 헉 소리가 나는 복잡한 수식은 최소화하고 이해에 꼭 필요한 수식만 담았습니다. 또한 작동 원리를 단번에 이해할 수 있게 도와주는 다양한 그림과 바로 실행하고 확인할 수 있는 108개 소스 코드를 예제로 제공해 알고리즘의 얼개를 완벽히 이해할 수 있도록 구성했습니다.
『이것이 자료구조+알고리즘이다』와 함께 자료구조와 알고리즘의 주요 개념을 포기 없이 끝까지 배워봅시다!

저자

박상현

저자:박상현
반도체공정자동화,통신장비,무기체계,사이버시큐리티분야에서SW를개발해왔으며현재는캘리포니아소재스타트업에서소프트웨어엔지니어로근무중이다.
2010년대한민국학술원우수학술도서로선정된『뇌를자극하는알고리즘』(2009)외에『이것이C#이다(개정판)』(2021),『뇌를자극하는파이썬3』(2016)등을집필했으며,2020년세종도서학술부문에선정된『그로킹딥러닝』(2019)를번역했다.

목차

__지은이의말
__이책의구성
__학습로드맵

Chapter00알아두면쓸데있는자료구조와알고리즘
_0.1자료구조
_0.2알고리즘
_0.3C언어로메모리를다루는방법
__0.3.1포인터복습
__0.3.2구조체복습
__0.3.3메모리레이아웃복습
__0.3.4스택에서데이터를다루는방법
__0.3.5힙에서데이터를다루는방법

Part01자료구조
Chapter01리스트
_1.1리스트ADT
__1.1.1리스트의개념
__1.1.2리스트와배열비교
_1.2링크드리스트
__1.2.1링크드리스트의노드표현
__1.2.2링크드리스트의주요연산
___VitaminQuiz1-1
__1.2.3링크드리스트예제프로그램
__1.2.4링크드리스트의장단점
___VitaminQuiz1-2
_1.3더블링크드리스트
__1.3.1더블링크드리스트의주요연산
__1.3.2더블링크드리스트예제프로그램
___VitaminQuiz1-3
_1.4환형링크드리스트
__1.4.1환형더블링크드리스트의주요연산
__1.4.2환형더블링크드리스트예제프로그램
_연습문제

Chapter02스택
_2.1스택ADT
__2.1.1스택의개념
___VitaminQuiz2-1
__2.1.2스택의핵심기능:삽입과제거연산
_2.2배열로구현하는스택
__2.2.1배열기반스택과스택의노드표현
__2.2.2배열기반스택의기본연산
__2.2.3배열기반스택예제프로그램
___VitaminQuiz2-2
_2.3링크드리스트로구현하는스택
__2.3.1링크드리스트기반스택과스택의노드표현
__2.3.2링크드리스트기반스택의기본연산
__2.3.3링크드리스트기반스택예제프로그램
_2.4스택의응용:사칙연산계산기
__2.4.1수식의중위표기법과후위표기법
__2.4.2후위표기식을계산하는알고리즘
__2.4.3중위표기식을후위표기식으로바꾸는알고리즘
__2.4.4사칙연산계산기예제프로그램
_연습문제

Chapter03큐
_3.1큐ADT
__3.1.1큐의개념
__3.1.2큐ADT의핵심기능:삽입과제거연산
_3.2순환큐
__3.2.1공백상태와포화상태
__3.2.2순환큐의기본연산
__3.2.3순환큐예제프로그램
_3.3링크드큐
__3.3.1링크드큐의기본연산
__3.3.2링크드큐예제프로그램
_연습문제

Chapter04트리
_4.1트리ADT
__4.1.1트리의개념
__4.1.2트리의구성요소
__4.1.3트리표현방법
__4.1.4노드표현방법
__4.1.5트리의기본연산
__4.1.6트리예제프로그램
___VitaminQuiz4-1
_4.2이진트리
__4.2.1이진트리의종류
__4.2.2이진트리의순회
__4.2.3이진트리의기본연산
__4.2.4이진트리예제프로그램
_4.3수식트리
__4.3.1수식트리구축방법
__4.3.2수식트리의구현
__4.3.3수식트리예제프로그램
_4.4분리집합
__4.4.1분리집합표현
__4.4.2분리집합의기본연산
__4.4.3분리집합예제프로그램
_연습문제

Part02알고리즘
Chapter05정렬
_5.1정렬알고리즘의개요
_5.2버블정렬
__5.2.1버블정렬의성능측정
__5.2.2.버블정렬예제프로그램
___VitaminQuiz5-1
_5.3삽입정렬
__5.3.1삽입정렬의성능측정
__5.3.2삽입정렬예제프로그램
_5.4퀵정렬
__5.4.1퀵정렬사용전해결해야하는2가지문제
__5.4.2퀵정렬예제프로그램
__5.4.3퀵정렬의성능측정
_5.5C언어표준라이브러리의퀵정렬함수:qsort()
__5.5.1qsort()함수예제프로그램
___VitaminQuiz5-2
__5.5.2qsort()응용문제
_연습문제

Chapter06탐색
_6.1탐색알고리즘의개요
_6.2순차탐색
__6.2.1전진이동법
___VitaminQuiz6-1
__6.2.2전위법
___VitaminQuiz6-2
__6.2.3계수법
___VitaminQuiz6-3
_6.3이진탐색
__6.3.1이진탐색의성능측정
__6.3.2이진탐색의구현
__6.3.3이진탐색예제프로그램:두번째최종시험문제
__6.3.4C언어표준라이브러리의이진탐색함수:bsearch()
__6.3.5bsearch()함수예제프로그램
_6.4이진탐색트리
__6.4.1이진탐색트리표현
__6.4.2이진탐색트리의기본연산
__6.4.3이진탐색트리예제프로그램
__6.4.4이진탐색트리의문제점
_6.5레드블랙트리
__6.5.1레드블랙트리의구현규칙
__6.5.2레드블랙트리의기본연산
__6.5.3레드블랙트리예제프로그램
_연습문제

Chapter07우선순위큐와힙
_7.1우선순위큐
__7.1.1우선순위큐의삽입/제거연산
__7.1.2우선순위큐의구현
_7.2힙
__7.2.1힙의삽입연산
__7.2.2힙의최솟값삭제연산
__7.2.3힙의구현
__7.2.4힙예제프로그램
_7.3힙기반우선순위큐의구현
_연습문제

Chapter08해시테이블
_8.1해시테이블의개요
__8.1.1해시
__8.1.2해시테이블
_8.2해시함수
__8.2.1나눗셈법
__8.2.2자릿수접기
__8.2.3해시함수의한계:충돌
_8.3충돌해결기법
__8.3.1체이닝
__8.3.2개방주소법
_연습문제

Chapter09그래프
_9.1그래프의개요
__9.1.1그래프의탄생배경:오일러의문제해결도구
__9.1.2그래프의정의
___VitaminQuiz9-1
_9.2그래프표현방법
__9.2.1인접행렬
__9.2.2인접리스트
___VitaminQuiz9-2
_9.3그래프순회기법
__9.3.1깊이우선탐색
__9.3.2너비우선탐색
__9.3.3그래프순회예제프로그램
_9.4위상정렬
__9.4.1위상정렬의동작방식
__9.4.2위상정렬예제프로그램
_9.5최소신장트리
__9.5.1프림알고리즘
__9.5.2크루스칼알고리즘
__9.5.3최소신장트리예제프로그램
_9.6최단경로탐색:데이크스트라알고리즘
__9.6.1데이크스트라알고리즘의개념
__9.6.2데이크스트라알고리즘예제프로그램
_연습문제

Chapter10문자열탐색
_10.1문자열탐색알고리즘의개요
_10.2고지식한탐색알고리즘
__10.2.1고지식한탐색의동작방식
__10.2.2고지식한탐색알고리즘예제프로그램
_10.3카프-라빈알고리즘
__10.3.1카프-라빈알고리즘의동작방식
__10.3.2카프-라빈알고리즘예제프로그램
_10.4KMP알고리즘
__10.4.1KMP알고리즘의동작방식
__10.4.2경계정보사전계산방법
__10.4.3KMP알고리즘예제프로그램
_10.5보이어-무어알고리즘
__10.5.1나쁜문자이동
__10.5.2착한접미부이동
__10.5.3보이어-무어알고리즘의전처리과정
__10.5.4보이어-무어알고리즘예제프로그램
_연습문제

Part03알고리즘설계기법
Chapter11알고리즘성능분석
_11.1알고리즘성능측정기준과수행시간
__11.1.1알고리즘성능측정기준
__11.1.2알고리즘수행시간분석
_11.2점근표기법
__11.2.1O표기법
__11.2.2Ω표기법
__11.2.3Θ표기법
_11.3재귀알고리즘성능분석
__11.3.1재귀방정식과재귀알고리즘
__11.3.2퀵정렬의성능분석
__11.3.3마스터정리
_연습문제

Chapter12분할정복
_12.1분할정복기법의개요
__12.1.1분할정복전술의탄생배경:아우스터리츠전투
__12.1.2분할정복알고리즘의개념
_12.2병합정렬
__12.2.1병합정렬동작방식
__12.2.2병합정렬알고리즘의구현
_12.3거듭제곱계산
__12.3.1거듭제곱계산법
__12.3.2거듭제곱계산알고리즘의구현
_12.4분할정복기반피보나치수구하기
__12.4.1피보나치수를구하는방법
__12.4.2분할정복으로피보나치수를구하는방법
__12.4.3분할정복기반피보나치수구하기알고리즘의구현
연습문제

Chapter13동적계획법
_13.1동적계획법의개요
__13.1.1동적계획법의탄생배경
__13.1.2동적계획법의개념
_13.2동적계획법기반피보나치수구하기
__13.2.1동적계획법으로피보나치수를구하는방법
__13.2.2동적계획법기반피보나치수구하기알고리즘의구현
_13.3최장공통부분수열
__13.3.1LCS알고리즘
__13.3.2동적계획법기반LCS알고리즘의구현
_연습문제

Chapter14탐욕알고리즘
_14.1탐욕알고리즘의개요
_14.2거스름돈줄이기문제
__14.2.1거스름돈계산예제프로그램
__14.2.2탐욕알고리즘의중요한속성
_14.3크루스칼알고리즘다시보기
_14.4데이크스트라알고리즘다시보기
_14.5허프만코딩
__14.5.1고정길이코드와접두어코드
__14.5.2허프만트리구축
__14.5.3데이터압축
__14.5.4데이터압축해제
__14.5.5허프만코딩예제프로그램
_연습문제

Chapter15백트래킹
_15.1백트래킹의개요
__15.1.1백트래킹의사례:테세우스이야기
__15.1.2백트래킹의개념
_15.2미로탈출로찾기
__15.2.1재귀호출기반백트래킹
__15.2.2미로탈출알고리즘의구현
__15.2.3미로탈출알고리즘예제프로그램

출판사 서평

[MainQuest:더나은개발자되기]
자료구조+알고리즘,더나은개발자가되기위한최고의LevelUp루트!

자료구조와알고리즘을배우면좋은개발자가되는데큰도움이됩니다.사실요즘은표준라이브러리에서여러알고리즘을기본으로제공하고있으므로표준라이브러리만사용해도프로그램을만들기에는충분합니다.하지만아무리좋은도구라도상황에맞지않는다면쓸모가없습니다.표준라이브러리는개발자에게있어도구함과같습니다.좋은개발자라면상황에맞는도구를잘꺼내어쓸줄도알아야합니다.
그렇다면“상황에맞는자료구조와알고리즘을어떻게선택할수있을까요?”자료구조와알고리즘이어떤원리와구조로작동하는지정확하게이해하고있어야합니다.작동원리를알고있으므로이것저것적용해보면서허송세월하는,“‘왜안되지?’의시간”을줄여더좋은프로그램을만드는시간에더많은시간을투자할수있습니다.심지어문제가발생했을때는상황에맞게알고리즘을개선할수도있습니다.
하지만자료구조와알고리즘은배우면배울수록더욱복잡한수식이등장하고,코드마저점점길어집니다.개발자에게는자료구조와알고리즘은레이드퀘스트와같습니다.더높은전투력을가지기위해도전하고또도전하지만,클리어는절대만만치않죠.마찬가지로더좋은개발자가되기위해서자료구조와알고리즘을배워야하지만,끝까지배우기는절대쉽지않습니다.어쩌면자료구조와알고리즘은개발자에게‘최종보스’일지도모릅니다.
그동안자료구조와알고리즘을끝까지배우지못했다면그건아직『이것이자료구조+알고리즘이다』를만나지못했기때문일것입니다.재미는학습을계속할큰동력이됩니다.좋은동료가있으면즐겁게게임(캠핑,등산,운동,독서모임등)을이어갈수있는것처럼,좋은참고서가옆에있으면자료구조와알고리즘을끝까지즐겁게배울수있습니다.그래서『이것이자료구조+알고리즘이다』가동료로삼을만큼좋은책이냐고요?지금부터『이것이자료구조+알고리즘이다』의특징과다루는내용을소개하겠습니다.

●『이것이자료구조+알고리즘이다』의특징

》자료구조+알고리즘개념에위트넘치는이야기를담았다!
》복잡한수식은최소화하고이해에꼭필요한수식만담았다!
》작동원리를쉽게이해할수있게도와주는다양한그림을담았다!
》배운내용을곧바로점검할수있는,퀘스트처럼재미있는다양한연습문제를담았다!
》배운알고리즘을바로바로테스트할수있는108개의예제소스를제공한다!
》자료구조와알고리즘공략을위한저자Q&A카페를운영한다!

●『이것이자료구조+알고리즘이다』에서다루는내용

》알고리즘의기반이자그자체로도아주유용한4가지자료구조
→리스트,스택,큐,트리

》프로그래밍실력향상에도움되는6가지알고리즘
→정렬,탐색,우선순위큐와힙,해시테이블,그래프

》더좋은프로그램을만드는데도움이되는알고리즘성능분석법과4가지설계기법
→알고리즘성능분석,분할정복,동적계획법,탐욕알고리즘,백트래킹

●『이것이자료구조+알고리즘이다』를읽어야하는당신

》C언어는완벽!그렇지만취업에알고리즘이필요하다던데?
→취업등을위해자료구조와알고리즘의기본개념을제대로이해하고싶은취업준비생!

》컴퓨터공학전공학점은완벽!그렇지만더좋은개발자가되고싶은데?
→컴퓨터공학전공자로자료구조와알고리즘만큼은제대로배우고싶은학생!

》실무능력은거의완벽!그렇지만헷갈릴수있는내용을그때그때확인하고싶은데?
→개발하면두고두고살펴볼자료구조와알고리즘참고서가필요한개발자!

●예제파일다운로드
hanbit.co.kr/src/11003

●관련도서
『혼자공부하는C언어』(한빛미디어,2019)
『이것이취업을위한코딩테스트다』(한빛미디어,2020)