콘텐츠 바로가기
본문 바로가기


블로그 전체검색
알고리즘 문제 풀이 전략

[도서] 알고리즘 문제 풀이 전략

조중필,한현상,이주호 공저

내용 평점 3점

구성 평점 3점

11월 15일 리뷰 - 리뷰자 김종욱


클로버 알고리즘 문제 풀이 전략

조중필, 한현상, 이주호 지음

 

 초판 인쇄가 잘못되어 안타깝게도 별점이 상당히 낮은 책. 그래서 2쇄가 새로이 발행되고 나서 모든 에러가 정정된 환골탈태? 한 책을 이번 기회에 리뷰를 하고자 한다. 무엇보다 이 책은 1년전에 리뷰가 완성되었어야 했음에도 불구하고 본 블로거가 그 동안 너무 많은? 일들인지 게으름인지 모를 상황에 놓여 있어 리뷰를 하지 못햇는데.. 모처럼 시간을 쪼게고 쪼게서 리뷰를 하게되었다. !

  

책에 관한 본격적인 리뷰에 임하기에 앞서 어떤 사람들에게 본 서를 권하는지 적어보도록 하겠다.


어떤 독자를 위한 책인가

 본 서는 이제 막 알고리즘에 입문하는 분들이나 혹은 알고리즘에 대해서 어느정도는 아는데, 이를 좀더 체계화 하고 싶은 분들이 공부하기에 좋은 구성을 하고 있다. 하지만 아쉽게도 중급자 이상의 분들이라면 이 책을 그리 권하지는 않는다. 중급자 이상의 분들이라면 '코드와 그림으로 마스터하는 알고리즘' 이나 혹은 'Top Coder algorithm Training','문제 풀이로 보는 알고리즘' 책의 내용이 보다 심오하고 생각할 점들이 있기 때문이다. 또한 책의 분석 순서가 나름 체계적이긴 하나 약간 조잡한 감이 없잖아 있기 때문에 본서 만 가지고 공부하기 보단 다른 여러 책들을 참고하며 같이 공부하면 효과가 더욱 향상 될 것이라 생각된다. 

    

책의 구성】 '알고리즘 문제 풀이 전략책의 구성은 어떠한가.


망치 본 서의 구성은 총 17가지의 쳅터로 구성되어있다. 처음에는 알고리즘의 정의를 설명하고 있으며 ( 예전엔 이 부분에서 에러가 심하게 발견 되었지만 지금은 오탈자들이 전부 개선되었다.) 그 다음 장부터는 기본적인 자료구조를 설명한 후에 알고리즘 문제들을 접근하는 식으로 순서가 짜여있다. 다만 본 알고리즘 풀이 과정에서 아쉬운 접근법으로 책이 구성되어 있는게 약간의 흠이라면 흠이다. 가령 테스트 케이스를 보여주고 각각의 테스트 케이스가 단개별로 진행되는 것이 보이지 않거나, 문제가 너무 두리 뭉실하여 알고리즘을 구축하는데 있어서 추론이 어렵다는 문제점 등이 있다. 허나 이 역시도 나름 공부가 되니, 소스코드를 같이 봐가며 분석한다면 실력 향상에 도움이 될 것임이 틀림 없다고 생가된다. ( 블로거의 경우 알고리즘 문제 책 전개 방식은 Top Coder 책이나, 문제풀이로 보는 알고리즘' 책 방식을 선호한다.) 책의 순서는 다음과 같다.

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 지그재그 숫자 출력하기 LEVEL 1 Hard

        전체 총 몇 행을 출력하는지 결정하는 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 파일의 저장 위치

        콘솔에서 실행 파일 입력해 실행하기

더보기 (더 보기 안내 글을 직접 입력할 수 있습니다.)


알고리즘 문제 풀이 전략 을 읽으며…….

 알고리즘 문제 해결에 있어서 가장 중요한 것은 전체 탐색을 하여 해당 문제를 전체적으로 살펴 본 후, 가지치키나 혹은 가중치를 두어 해당 솔루션들만 빠르게 추출해 내는 것이다. 가령 다이나믹 프로그래밍이나 재귀적 방식(순열, 조합), 맵을 이용하거나 이러한 것들이 그것에 속한다. 처음에는 알고리즘 문제를 풀때 어려움을 경험할 수 있다. 블로거도 그랬다. 블로거는 옜날 15년 전에 Swap 함수조차 못만들던 때가 있었다. 그만큼 알고리즘은 생소하고 어렵게 느껴지는 것이 현실이다. 하지만 어려움을 인정하고 꾸준히 연습하고 공부한다면 자신도 모르는 사이에 높은 산의 정상 위에 서있는 것을 확인할 수 있을 것이다.



점수…….

구성 : ★ 내용:★  디자인: ★★★ 전문성 : 


#본 리뷰는 리뷰자 김종욱의 저작권에 귀속되므로 참고시 참고 URL 명시 및 저작자에게 사용 통보를 해 주시기 바랍니다.

#본 리뷰의 점수 및 평가 내용은 김종욱 리뷰자의 한정된 것이므로 지극히 주관된 평가 임을 명시합니다.

#학습과 관련된 질문과 문제에 대한 질문은 일절 받지 않습니다. 스스로 찾아서 학습하는 것 그것이야 말로 진정한 학습자입니다. 



######  감사합니다  ######  


PRIDE1