책소개
취업, 승진, 대회 준비 등에 대비해 프로그래머의 역량을 키우는 데 필요한 알고리즘 문제 풀이 전략을 알려준다. 1부에서는 프로그래머가 꼭 알아야 할 주요 알고리즘 이론을 그림과 코드로 함께 분석하면서 알고리즘의 개념을 익힌다. 2부에서는 국내외에서 많이 소개된 알고리즘 문제를 제시한 후, 문제 분석 브레인 스토밍, 정답 코드 제시, 코드 해설을 통해서 알고리즘 문제를 해결하는 데 꼭 필요한 내용을 소개한다. 실력 향상에 고민하는 프로그래머는 물론, 현재 IT 실무 현장에서 일하는 프로그래머라면 이 책을 통해서 앞으로 프로그래머로 살아가는 데 필요한 기초 체력을 다질 수 있다.
목차
Part I. 꼭 알아야 하는 필수 알고리즘
CHAPTER 1 알고리즘의 역할
__01 알고리즘의 정의
____알고리즘의 조건
__02 알고리즘을 왜 평가해야 하는가?
____알고리즘을 평가해야 하는 이유
____알고리즘 평가의 세 가지 요소
__03 수학적 배경
____알고리즘의 수학적 표기 방법
____빅오 표기법의 종류
____반복문의 시그마 연산 표현
__04 분석의 대상
____무엇을 분석할 것인가?
____반복문은 최대 반복 횟수로 계산한다
____중첩된 반목문은 중첩문 각각의 최대 반복 횟수를 곱해서 계산한다
____반복문이 떨어져서 2개 이상 있는 경우는 그중 가장 큰 값으로 계산한다
____if-else문은 알고리즘 성능에 영향을 미치지 않는다
____재귀 호출은 풀어서 계산한다
__05 알고리즘의 분석과 최적화
____프로그램의 수학적 분석 예
____프로그램의 최적화 예
__06 정리
CHAPTER 2 알고리즘을 배우기 전에 알아야 할 다섯 가지
__01 메모리와 주소의 관계
__02 자료형과 배열
____메모리와 자료형
____메모리와 배열
__03 배열의 응용
____함수와 일차원 배열의 사용
____다차원 배열
__04 포인터
____포인터는 왜 사용할까?
____포인터의 사용 형식
__05 배열과 포인터의 사용
____배열과 포인터의 기본적인 조합 방법
____배열과 포인터의 차이점
____배열을 사용하는 포인터를 함수의 매개변수로 사용
__06 포인터 배열과 포인터 연산
____포인터 배열이란?
____포인터 연산의 이해
__07 포인터의 활용: Call by reference
__08 정리
CHAPTER 3 기본적인 자료구조
__01 링크드 리스트란?
__02 단일 링크드 리스트의 삽입과 삭제
____단일 링크드 리스트의 특징
____단일 링크드 리스트의 삽입 알고리즘
____단일 링크드 리스트의 삭제 알고리즘
__03 이중 링크드 리스트
____이중 링크드 리스트
____이중 링크드 리스트의 삽입과 삭제 알고리즘
__04 스택의 개념과 알고리즘
____스택의 개념
____스택의 구현
____푸시와 팝
__05 큐의 개념과 알고리즘
____큐의 개념
____배열을 사용한 큐의 구현
____링크드 리스트를 사용한 큐의 구현
__06 정리
CHAPTER 4 트리
__01 트리의 개념과 주요 용어
____트리의 개념
____트리 관련 주요 용어
____이진 트리
____트리의 순회 알고리즘
__02 전위 순회 알고리즘
__03 중위 순회 알고리즘
____재귀 호출을 사용한 중위 순회
____스택을 사용한 중위 순회
__04 후위 순회 알고리즘
____재귀 호출을 사용한 후위 순회
____스택을 사용한 후위 순회
____스택을 사용하는 순회 알고리즘의 비교
__05 단계 순회 알고리즘
__06 정리
CHAPTER 5 트리의 응용
__01 AVL 트리
____이진 트리의 문제점
____AVL 트리
____AVL 트리의 구성
__02 2-3 트리
____AVL 트리의 문제점을 해결하는 2-3 트리
____2-3 트리의 구현
____2-3 트리의 변형
__03 정리
CHAPTER 6 기본 정렬 알고리즘
__01 다양한 정렬 알고리즘
__02 선택 정렬 알고리즘
____선택 정렬 알고리즘의 개념
____선택 정렬 알고리즘의 분석
__03 삽입 정렬 알고리즘
____삽입 정렬 알고리즘의 개념
____삽입 정렬 알고리즘의 분석
__04 버블 정렬 알고리즘
____버블 정렬 알고리즘의 개념
____버블 정렬 알고리즘의 분석
__05 셸 정렬 알고리즘
____셸 정렬 알고리즘의 개념
____셸 정렬 알고리즘의 분석
06 정리
CHAPTER 7 향상된 정렬 알고리즘
__01 퀵 정렬 알고리즘
____퀵 정렬 알고리즘의 개념
____퀵 정렬 알고리즘의 분석
__02 기수 정렬 알고리즘
____기수 정렬 알고리즘의 개념
____기수 정렬 알고리즘의 분석
__03 병합 정렬 알고리즘
____병합 정렬 알고리즘의 개념
____병합 정렬 알고리즘의 분석
__04 힙 정렬 알고리즘
____힙 정렬 알고리즘의 개념
____힙 정렬 알고리즘의 분석
__05 정리
CHAPTER 8 이진 검색 알고리즘
__01 이진 검색 알고리즘
____이진 검색 알고리즘의 개념
__02 이진 검색 트리 알고리즘
____이진 검색 트리 알고리즘의 특성
____이진 검색 트리 알고리즘의 데이터 삽입
____이진 검색 트리 알고리즘의 데이터 삭제
__03 정리
CHAPTER 9 해시 알고리즘
__01 해시 알고리즘
____키-주소 검색 알고리즘
____키-매핑 검색 알고리즘
__02 해시 알고리즘의 문제점
____해시 알고리즘의 데이터 중복 문제
__03 해시 알고리즘의 문제 해결 방법
____해시 알고리즘에서 발생되는 문제들
__04 정리
Part II. 실전 알고리즘 문제 해결
CHAPTER 10 몸풀기 알고리즘 문제
__01 10진수와 16진수 변환 프로그램
__02 숫자 맞추기
____임의의 숫자를 생성하는 방법
____프로그램이 계속 실행되도록 하는 방법
__03 최대공약수 구하기
____임의의 숫자의 약수를 구하는 방법
____임의의 두 숫자에 공통으로 해당하는 약수를 구하는 방법
____임의의 두 숫자에 공통으로 해당하는 약수 중 최댓값을 선택하는 방법
__04 피보나치 수열
__05 임의의 숫자 배수의 개수와 합 구하기
__06 소수 구하기
____소수를 구하는 기능
____한 행에 값 8개씩 맞춰 출력하는 기능
__07 지그재그 숫자 출력하기
____전체 총 몇 행을 출력하는지 결정하는 for문
____출력할 행이 홀수인 경우의 for문
____출력할 행이 짝수인 경우의 for문
__08 재귀 호출로 최대공약수 구하기
____첫 번째 재귀 호출: x = 4, y = 6
____두 번째 재귀 호출: x = 6, y = 4
____세 번째 재귀 호출: x = 4, y = 2
____네 번째 재귀 호출: x = 2, y = 0
____최종 결과
__09 정리
CHAPTER 11 기본기를 다지는 알고리즘 문제
__01 탐욕 알고리즘
__02 세포의 자기 증식 프로젝트
__03 재난 관리 프로젝트
__04 블록 쌓기 게임
CHAPTER 12 수학식을 이용하는 알고리즘 I
__01 분할 정복 알고리즘의 특징
__02 하노이의 탑
__03 기약 분수 구하기
__04 동전 옮기기
__05 숫자 순환
CHAPTER 13 수학식을 이용하는 알고리즘 II
__01 탐욕 알고리즘의 특징
__02 앞뒤가 같은 제곱
__03 연 소수
__04 최대 연속 부분합
__05 화물차 배치
__06 대칭 행렬 구하기
CHAPTER 14 동적 계획법의 기본 개념
__01 동적 계획법의 특징
__02 계단 오르기 게임
__03 타일 바르기
__04 목장 울타리 만들기
__05 한빛스키장 리프트 가격
__06 포인트 스키 활강
CHAPTER 15 동적 계획법 응용
__01 동적 계획법의 전형적인 문제
__02 한빛 패스트푸드
__03 시장의 도시 방문기
__04 신입 사원 선발
__05 해커의 도전
__06 배낭 여행
CHAPTER 16 맵을 이용하는 알고리즘
__01 백 트래킹 알고리즘의 개념
__02 생화학 폭탄
__03 아파트 단지
__04 피곤한 배달부
__05 체스
__06 배수로 공사
CHAPTER 17 출제 빈도가 높은 알고리즘 문제
__01 세뱃돈 만들기
__02 한빛캐피탈의 스타트업 투자
__03 외양간 고치기
__04 영역의 크기
__05 식인종과 연구원
부록 Visual Studio 2013의 설치 및 설정 방법
__01 Visual Studio 2013의 다운로드와 설치
____Visual Studio 웹사이트
____Visual Studio 2013의 설치
____Visual Studio 2013의 실행
__02 Visual Studio 2013을 사용한 테스트 코드 빌드와 실행
____새로운 프로젝트의 생성
____새로운 소스 코드의 생성
____코드 입력과 빌드 및 실행
__03 실행과 디버깅
____input.txt 파일의 저장 위치
____콘솔에서 실행 파일 입력해 실행하기