메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

이것이 자료구조+알고리즘이다 with C 언어

한빛미디어

집필서

판매중

  • 저자 : 박상현
  • 출간 : 2022-08-03
  • 페이지 : 664 쪽
  • ISBN : 9791169210034
  • 물류코드 :11003
  • 초급 초중급 중급 중고급 고급
4.9점 (48명)
좋아요 : 34

자료구조+알고리즘의 개념부터 실습까지 

포기 없이 즐겁게 배우자!

 

자료구조와 알고리즘은 IT 기업의 면접과 코딩 테스트 통과를 위한 필수 역량입니다. 알고리즘을 배워두면 단순히 취업뿐 아니라 더 좋은 개발자가 되는 데 큰 도움이 됩니다. 하지만 자료구조와 알고리즘은 배우기 어려우며 심지어 재미도 없다 보니 많은 개발자가 중도에 학습을 포기합니다. 『이것이 자료구조+알고리즘이다』는 독자가 마지막 페이지까지 읽도록 하는 것에 목표를 두었습니다.

처음 배우는 사람의 눈높이에 맞춰 리스트부터 백트래킹까지 자주 사용되는 자료구조와 알고리즘 개념을 위트 넘치는 이야기로 쉽게 설명합니다. 보기만 해도 헉 소리가 나는 복잡한 수식은 최소화하고 이해에 꼭 필요한 수식만 담았습니다. 또한 작동 원리를 단번에 이해할 수 있게 도와주는 다양한 그림과 바로 실행하고 확인할 수 있는 108개 소스 코드를 예제로 제공해 알고리즘의 얼개를 완벽히 이해할 수 있도록 구성했습니다.

『이것이 자료구조+알고리즘이다』와 함께 자료구조와 알고리즘의 주요 개념을 포기 없이 끝까지 배워봅시다!

 

 

 

700px_이것이 자료구조+알고리즘이다 상세 페이지.jpg

박상현 저자

박상현

검색 엔진 포털, 통신 장비, 반도체 공정 자동화, 무기 체계 등 다양한 도메인에 걸쳐 소프트웨어를 개발해 왔다. 현재는 캘리포니아 소재 스타트업에서 소프트웨어 엔지니어로 근무 중이다.

엔지니어로 일하면서 『이것이 자료구조+알고리즘이다 with C 언어』(2022), 『그로킹 딥러닝』(2019)을 비롯하여 10여 권의 저서와 1권의 역서를 펴냈다

 

 

__지은이의 말

__이 책의 구성

__학습 로드맵

 

Chapter 00 알아두면 쓸 데 있는 자료구조와 알고리즘

_0.1 자료구조

_0.2 알고리즘

_0.3 C 언어로 메모리를 다루는 방법 

__0.3.1 포인터 복습

__0.3.2 구조체 복습 

__0.3.3 메모리 레이아웃 복습 

__0.3.4 스택에서 데이터를 다루는 방법

__0.3.5 힙에서 데이터를 다루는 방법 

 

 

Part 01 자료구조

 

Chapter 01 리스트

_1.1 리스트 ADT 

__1.1.1 리스트의 개념 

__1.1.2 리스트와 배열 비교 

_1.2 링크드 리스트

__1.2.1 링크드 리스트의 노드 표현 

__1.2.2 링크드 리스트의 주요 연산

___Vitamin Quiz 1-1 

__1.2.3 링크드 리스트 예제 프로그램

__1.2.4 링크드 리스트의 장단점

___Vitamin Quiz 1-2 

_1.3 더블 링크드 리스트

__1.3.1 더블 링크드 리스트의 주요 연산

__1.3.2 더블 링크드 리스트 예제 프로그램

___Vitamin Quiz 1-3

_1.4 환형 링크드 리스트

__1.4.1 환형 더블 링크드 리스트의 주요 연산

__1.4.2 환형 더블 링크드 리스트 예제 프로그램 

_연습문제

 

Chapter 02 스택

_2.1 스택 ADT

__2.1.1 스택의 개념

___Vitamin Quiz 2-1

__2.1.2 스택의 핵심 기능: 삽입과 제거 연산

_2.2 배열로 구현하는 스택

__2.2.1 배열 기반 스택과 스택의 노드 표현

__2.2.2 배열 기반 스택의 기본 연산

__2.2.3 배열 기반 스택 예제 프로그램

___Vitamin Quiz 2-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 사칙 연산 계산기 예제 프로그램

_연습문제

 

Chapter 03 큐

_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 링크드 큐 예제 프로그램

_연습문제

 

Chapter 04 트리

_4.1 트리 ADT

__4.1.1 트리의 개념

__4.1.2 트리의 구성 요소

__4.1.3 트리 표현 방법

__4.1.4 노드 표현 방법

__4.1.5 트리의 기본 연산

__4.1.6 트리 예제 프로그램

___Vitamin Quiz 4-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 분리 집합 예제 프로그램

_연습문제

 

 

Part 02 알고리즘

 

Chapter 05 정렬

_5.1 정렬 알고리즘의 개요 

_5.2 버블 정렬 

__5.2.1 버블 정렬의 성능 측정

__5.2.2. 버블 정렬 예제 프로그램

___Vitamin Quiz 5-1

_5.3 삽입 정렬

__5.3.1 삽입 정렬의 성능 측정

__5.3.2 삽입 정렬 예제 프로그램

_5.4 퀵 정렬

__5.4.1 퀵 정렬 사용 전 해결해야 하는 2가지 문제

__5.4.2 퀵 정렬 예제 프로그램

__5.4.3 퀵 정렬의 성능 측정

_5.5 C 언어 표준 라이브러리의 퀵 정렬 함수: qsort( )

__5.5.1 qsort( ) 함수 예제 프로그램

___Vitamin Quiz 5-2

__5.5.2 qsort( ) 응용 문제 

_연습문제

 

Chapter 06 탐색

_6.1 탐색 알고리즘의 개요

_6.2 순차 탐색

__6.2.1 전진 이동법

___Vitamin Quiz 6-1

__6.2.2 전위법

___Vitamin Quiz 6-2

__6.2.3 계수법

___Vitamin Quiz 6-3

_6.3 이진 탐색

__6.3.1 이진 탐색의 성능 측정

__6.3.2 이진 탐색의 구현

__6.3.3 이진 탐색 예제 프로그램: 두 번째 최종 시험 문제 

__6.3.4 C 언어 표준 라이브러리의 이진 탐색 함수: bsearch( )

__6.3.5 bsearch( ) 함수 예제 프로그램

_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 레드 블랙 트리 예제 프로그램 

_연습문제


Chapter 07 우선순위 큐와 힙

_7.1 우선순위 큐

__7.1.1 우선순위 큐의 삽입/제거 연산

__7.1.2 우선순위 큐의 구현

_7.2 힙

__7.2.1 힙의 삽입 연산

__7.2.2 힙의 최솟값 삭제 연산

__7.2.3 힙의 구현

__7.2.4 힙 예제 프로그램

_7.3 힙 기반 우선순위 큐의 구현

_연습문제

 

Chapter 08 해시 테이블

_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 개방 주소법

_연습문제

 

Chapter 09 그래프

_9.1 그래프의 개요

__9.1.1 그래프의 탄생 배경: 오일러의 문제 해결 도구 

__9.1.2 그래프의 정의

___Vitamin Quiz 9-1

_9.2 그래프 표현 방법 

__9.2.1 인접 행렬

__9.2.2 인접 리스트 

___Vitamin Quiz 9-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 데이크스트라 알고리즘 예제 프로그램

_연습문제

 

Chapter 10 문자열 탐색

_10.1 문자열 탐색 알고리즘의 개요

_10.2 고지식한 탐색 알고리즘

__10.2.1 고지식한 탐색의 동작 방식

__10.2.2 고지식한 탐색 알고리즘 예제 프로그램 

_10.3 카프-라빈 알고리즘

__10.3.1 카프-라빈 알고리즘의 동작 방식

__10.3.2 카프-라빈 알고리즘 예제 프로그램

_10.4 KMP 알고리즘

__10.4.1 KMP 알고리즘의 동작 방식

__10.4.2 경계 정보 사전 계산 방법 

__10.4.3 KMP 알고리즘 예제 프로그램

_10.5 보이어-무어 알고리즘

__10.5.1 나쁜 문자 이동

__10.5.2 착한 접미부 이동

__10.5.3 보이어-무어 알고리즘의 전처리 과정

__10.5.4 보이어-무어 알고리즘 예제 프로그램

_연습문제 

 

 

Part 03 알고리즘 설계 기법

 

Chapter 11 알고리즘 성능 분석

_11.1 알고리즘 성능 측정 기준과 수행 시간

__11.1.1 알고리즘 성능 측정 기준 

__11.1.2 알고리즘 수행 시간 분석

_11.2 점근 표기법

__11.2.1 O 표기법

__11.2.2 Ω 표기법

__11.2.3 Θ 표기법

_11.3 재귀 알고리즘 성능 분석

__11.3.1 재귀 방정식과 재귀 알고리즘 

__11.3.2 퀵 정렬의 성능 분석 

__11.3.3 마스터 정리

_연습문제 

 

Chapter 12 분할 정복

_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 분할 정복 기반 피보나치 수 구하기 알고리즘의 구현

연습문제

 

Chapter 13 동적 계획법

_13.1 동적 계획법의 개요

__13.1.1 동적 계획법의 탄생 배경

__13.1.2 동적 계획법의 개념

_13.2 동적 계획법 기반 피보나치 수 구하기 

__13.2.1 동적 계획법으로 피보나치 수를 구하는 방법

__13.2.2 동적 계획법 기반 피보나치 수 구하기 알고리즘의 구현

_13.3 최장 공통 부분 수열 

__13.3.1 LCS 알고리즘 

__13.3.2 동적 계획법 기반 LCS 알고리즘의 구현

_연습문제 

 

Chapter 14 탐욕 알고리즘

_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 허프만 코딩 예제 프로그램

_연습문제

 

Chapter 15 백트래킹

_15.1 백트래킹의 개요

__15.1.1 백트래킹의 사례: 테세우스 이야기

__15.1.2 백트래킹의 개념

_15.2 미로 탈출로 찾기

__15.2.1 재귀 호출 기반 백트래킹

__15.2.2 미로 탈출 알고리즘의 구현

__15.2.3 미로 탈출 알고리즘 예제 프로그램

_15.3 8개의 퀸 문제

__15.3.1 8개의 퀸이 만드는 해공간과 백트래킹

__15.3.2 N개의 퀸 문제 풀이 알고리즘의 구현

__15.3.3 N개의 퀸 문제 풀이 예제 프로그램

_연습문제

 

__찾아보기

[ Main Quest: 더 나은 개발자 되기 ]

자료구조+알고리즘, 더 나은 개발자가 되기 위한 최고의 Level Up 루트!

 

자료구조와 알고리즘을 배우면 좋은 개발자가 되는 데 큰 도움이 됩니다. 사실 요즘은 표준 라이브러리에서 여러 알고리즘을 기본으로 제공하고 있으므로 표준 라이브러리만 사용해도 프로그램을 만들기에는 충분합니다. 하지만 아무리 좋은 도구라도 상황에 맞지 않는다면 쓸모가 없습니다. 표준 라이브러리는 개발자에게 있어 도구함과 같습니다. 좋은 개발자라면 상황에 맞는 도구를 잘 꺼내어 쓸 줄도 알아야 합니다.

그렇다면 “상황에 맞는 자료구조와 알고리즘을 어떻게 선택할 수 있을까요?” 자료구조와 알고리즘이 어떤 원리와 구조로 작동하는지 정확하게 이해하고 있어야 합니다. 작동 원리를 알고 있으므로 이것저것 적용해 보면서 허송세월하는, “‘왜 안 되지?’의 시간”을 줄여 더 좋은 프로그램을 만드는 시간에 더 많은 시간을 투자할 수 있습니다. 심지어 문제가 발생했을 때는 상황에 맞게 알고리즘을 개선할 수도 있습니다.

하지만 자료구조와 알고리즘은 배우면 배울수록 더욱 복잡한 수식이 등장하고, 코드마저 점점 길어집니다. 개발자에게는 자료구조와 알고리즘은 레이드 퀘스트와 같습니다. 더 높은 전투력을 가지기 위해 도전하고 또 도전하지만, 클리어는 절대 만만치 않죠. 마찬가지로 더 좋은 개발자가 되기 위해서 자료구조와 알고리즘을 배워야 하지만, 끝까지 배우기는 절대 쉽지 않습니다. 어쩌면 자료구조와 알고리즘은 개발자에게 ‘최종 보스’일지도 모릅니다. 

그동안 자료구조와 알고리즘을 끝까지 배우지 못했다면 그건 아직 『이것이 자료구조+알고리즘이다』를 만나지 못했기 때문일 것입니다. 재미는 학습을 계속할 큰 동력이 됩니다. 좋은 동료가 있으면 즐겁게 게임(캠핑, 등산, 운동, 독서 모임 등)을 이어갈 수 있는 것처럼, 좋은 참고서가 옆에 있으면 자료구조와 알고리즘을 끝까지 즐겁게 배울 수 있습니다. 그래서 『이것이 자료구조+알고리즘이다』가 동료로 삼을 만큼 좋은 책이냐고요? 지금부터 『이것이 자료구조+알고리즘이다』의 특징과 다루는 내용을 소개하겠습니다. 

 

 

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

 

》 자료구조+알고리즘 개념에 위트 넘치는 이야기를 담았다!

》 복잡한 수식은 최소화하고 이해에 꼭 필요한 수식만 담았다!

》 작동 원리를 쉽게 이해할 수 있게 도와주는 다양한 그림을 담았다!

》 배운 내용을 곧바로 점검할 수 있는, 퀘스트처럼 재미있는 다양한 연습문제를 담았다!

》 배운 알고리즘을 바로바로 테스트할 수 있는 108개의 예제 소스를 제공한다!

》 자료구조와 알고리즘 공략을 위한 저자 Q&A 카페를 운영한다!

 

 

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

 

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

→ 리스트, 스택, 큐, 트리

 

》 프로그래밍 실력 향상에 도움되는 6가지 알고리즘

→ 정렬, 탐색, 우선순위 큐와 힙, 해시 테이블, 그래프

 

》 더 좋은 프로그램을 만드는데 도움이 되는 알고리즘 성능 분석법과 4가지 설계 기법

→ 알고리즘 성능 분석, 분할 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹

 

 

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

 

》 C 언어는 완벽! 그렇지만 취업에 알고리즘이 필요하다던데?

→ 취업 등을 위해 자료구조와 알고리즘의 기본 개념을 제대로 이해하고 싶은 취업준비생!

 

》 컴퓨터공학 전공 학점은 완벽! 그렇지만 더 좋은 개발자가 되고 싶은데?

→ 컴퓨터공학 전공자로 자료구조와 알고리즘만큼은 제대로 배우고 싶은 학생!

 

》 실무 능력은 거의 완벽! 그렇지만 헷갈릴 수 있는 내용을 그때그때 확인하고 싶은데? 

→ 개발하면 두고두고 살펴볼 자료구조와 알고리즘 참고서가 필요한 개발자!

 

 

● 예제 파일 다운로드

 

     → https://www.hanbit.co.kr/src/11003

 

 

● 관련 도서

 

『혼자 공부하는 C 언어』(한빛미디어, 2019)

『이것이 취업을 위한 코딩 테스트다』(한빛미디어, 2020)

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

간만에 근본 of 근본. 자료구조와 알고리즘 책을 펼쳤다.

그 와중에 언어도 C언어로 씌여진 책이다.

 

근 10년 사이에 Computer Science 에 있어서 큰 흐름의 변화가 있다면

파이썬의 대두와 그 활용에 대한 확대(데이터 사이언스와 딥러닝&머신러닝),

그리고 새로이 배우는 뉴비에 대한 친화적인 교육환경 조성이 있지 않을까.

 

그 결과 완전 대세 자리매김해버린 파이썬.

 

하지만 우리가 잊지 말아야할 근본은 정신적으로는 자료구조와 알고리즘, 

육체적으로(...?.. 언어적으로는 이라는 표현이 더 맞겠다.)는 C/C++ 이지 않을까 라고 스스로는 생각한다.

 

'파이썬님이 알아서 다 해주실거야' 라고 생각하지 않는다면

결코 C/C++을 놓을 수 없다는 것은 다들 수긍하지 않을까.

 

그래서 근본과 근본이 만난 책이지 않나..

하지만 역시나 시대가 바뀌어서 그런지

C로 씌여진 자료구조라는건 매우 유별나지 않았던 것이었는데도 불구하고

지금은 왜인지 좀.. 오래된 느낌이 들긴하다.

 

파이썬으로 씌여진 자료구조 및 알고리즘 책이었다면 좀 달랐을까

 

IMG_2675.jpeg

 

IMG_2676.jpeg

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다

개발자에게 있어서 알고리즘이란, 지구에서 살고있는 인류에게 꼭 필요한 산소와 같은 그런 것이다

알고리즘을 모르고서도 좋은 개발자가 되기도 한다. 하지만 좋은 개발자가 좋은 코드를 만드는 것은 아니다.

좋은 코드란, 사용자가 쉽게 사용할 수 있는 어플리케이션이 되는것과 내부에서 효율적으로 잘 작동되는 코드이다.

수많은 알고리즘 관련 교재들이 시중에 나와 있음에도 불구하고 한빛미디어에서 알고리즘 관련 교재를 펴낸 데는 또다른 이유가 있을 것으로 보인다.

이 교재는

단순히 알고리즘 코드만 나열한 다른 교재와는 다소 다른 편집이 눈에 띈다. 알고리즘을 공부하기 앞서 가장 기본적인 자료구조에 대하여 설명하고 있다. 일반적으로 알고리즘 교재들이 설명하는 단순한 정렬, 탐색 알고리즘과 함께 "우선순위 큐와 힙", "해시테이블", "그래프", "문자열 탐색" 알고리즘을 C 언어 코드와 함께 쉽게 풀어 쓰고 있다. 물론 쉽게 풀어쓴다는 개념이 독자마다 다른 무게감으로 다가 올수 있겠으나, 저자는 가능하면 독자들이 쉽게 이해할 수 있도록 하기위해 노력하고 있다. 교재 곳곳에서 저자의 이러한 노력이 엿보인다,

후반부에서는 알고리즘 설계 기법을 설명하면서 "알고리즘 성능 분석", "분할정복","동적계획법"등을 설명하고 있으며, "탐욕알고리즘","백트랙킹" 등의 응용 알고리즘에 대해서도 설명하고 있다.

단순한 기본 알고리즘과 알고리즘 설계기법, 응용 알고리즘의 설명등 다른 알고리즘 관련 교재와는 차별화된 편집이 좋았다.

처음 알고리즘 공부를 시작하는 독자라면 앞편의 기본 자료구조에 대하여 잘 익혀두는 것이 좋겠다. 기본 자료구조, 배열, 포인터 등의 개념이 없이 단순 알고리즘 해석을 하는 것은 아직 연습이 덜된 초보 운전자가 카 레이싱을 하려고 하는 것과 같지 않을까 생각해 본다.

시중에 많은 자료구조 책들은 그 분량에 놀라 쉽게 접근하기 어려운데, 이 교재는 자료구조의 핵심적인 부분들을 쉽게 풀어 쓰고 있다.

자료구조에 대한 이해를 잘 하고, 다음장의 정렬, 탐색 알고리즘의 코드를 하나하나 그림으로 그려가며 따라가 보기를 권한다. 코드를 보고 이해하는 것 보다는 코드의 흐름을 종이에 그림으로 그려보는 것은 당장은 다소 지루하고 어려울수 있으나, 상당히 효과적이다.

오랜만에 괜찮은 알고리즘 관련 교재를 읽을 수 있어서 참 좋았다.

이 책의 저자는 반도체 공정 자동화, 통신 장비, 무기체계, 사이버 시큐리티 분야에서 SW를 개발해왔으며 현재는 캘리포니아 소재 스타트업에서 엔지니어로 근무중입니다.

2010년 대한민국학술원 우수도서로 선정된 "뇌를 지배하는 알고리즘 2009" 외에 이것이 C#이다 개정판 2021 뇌를 자극하는 파이썬 3 2016 등을 집필하였습니다.


지은이의 말

 

좋은 프로그래머가 되려면 눈앞의 문제에 적절한 자료구조와 알고리즘을 적용할 수 있어야 합니다.

요즘 소프트웨어 엔지니어가 많이 사용하는 C#, 자바, 코틀린, 파이썬과 같은 현대 프로그래밍 언어는 리슽, 스택, 큐, 트리 등의 자료구조뿐 아니라 탐색, 정렬 등의 알고리즘을 표준 라이브러리로 제공합니다.

제품이나 서비스를 개발할 때 자료구조나 알고리즘을 직접 구현하기 보다는 이미 검증된 표준 라이브러리 사용을 권장하기도 합니다.

2009년에 출간한 뇌를 자극하는 알고리즘으로부터 13년이 흘러서 리뉴얼 되었습니다.

자료구조와 알고리즘을 처음 배우는 독자가 이 책을 끝까지 읽을 수 있도록 하는 것이 저자의 집필 목표였다고 합니다.

이 책의 구성

학습 목표 : 본격적인 학습에 앞서 본문 내용을 친숙하게 받아들일 수 있도록 각 장의 핵심 개념과 대략적인 학습 흐름을 제시합니다.

연습문제 : 응용력 향상을 위해 본문에서 다뤘던 내용을 바탕으로 다양한 문제를 제시합니다.

독자스스로 해답을 찾아가는 과정에서 한 단계 레벨 업 하기를 바라는 마음으로 연습문제 해답은 별도로 제공하지 않습니다.

여기서 잠깐 : 보충 설명, 참고 사항, 관련 용어 등을 본문과 분리하여 설명합니다.

NOTE : 학습을 진행하면서 좋은 내용이나 혼동하기 쉬운 내용을 설명합니다.

비타민 퀴즈 : 학습한 내용을 곧바로 점검할 수 있도록 간단한 퀴즈를 제시합니다.

학습 로드맵

01 자료구조 - 리스트, 스택, 큐, 트리

02 알고리즘 : 정렬, 탐색, 우선순위 큐와 힙, 해시 테이블, 그래프, 문자열 탐색

03 알고리즘 설계 기법 - 알고리즘 성능 분석, 분학 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹

자료구조

자료구조 Data Structure 는 컴퓨터가 데이터를 효율적으로 다룰 수 있게 도와주는 데이터 보관 방법과 데이터에 관한 연산의 총체를 뜻합니다.

자료구조는 단순 자료구조와 복합 자료구조로 나뉩니다.

이 책에서는 단순 자료구조는 다루지 않고 복합자료구조만을 다루고 있습ㄴ디ㅏ.

복합 자료구즌ㄴ 다시 선형 자료 구조와 비선형 자료구조로 나뉩니다.

선형 자료구조는 우리에게 친숙한 배열, 링크드 리슽, 스택, 큐 등이 여기에 해당됩니다.

비선형 자료구조는 선형 자료구조와 달리 데이터 요소를 비순차적으로 연결합ㄴ디ㅏ.

트리와 그래프가 여기에 해당됩니다.

여러분이 자료구조와 관련해서 알아두었으면 하는 개념이 한가지 더 있습니다. 바로 추상 데이터 형식 다시 말해 ADT 인데요

이것은 자료구조와 동작 방법을 표현하는 데이터 형식입니다. 정리하자면 ADT는 자료구조가 갖춰야 할 일련의 연산이라고 할 수 있습니다.

자료구조를 왜 공부해야 하나요?

첫째 자료구조의 내부를 이해하면 라이브러리에서 엉뚱한 자료구조를 선택하는 일은 피할 수 있습니다.

동일한 ADT를 사용하더라도 자료구조에 따라 애플리케이션 성능이 크게 다라질 수 있습니다.

둘째 자료구조는 알고리즘이 데이터를 효율적으로 사용할 수 있게 도와주는 핵심 부품 역할을 하기때문입니다.


이 책은 자료구조와 알고리즘을 처음 접하는 분들을 위한 책입니다.

C언어를 기본 바탕으로 쓰여져 있지만 다른 언어를 써본 독자들이라면 누구나 이해하기 쉽도록 쓰여져 있습니다.

프로그래밍의 기본이라고 할 수 있는 자료구조와 알고리즘을 처음부터 배워보고 싶은 분들에게 한번 읽어보기를 권해드립니다.

 

 

이것이 자료구조+알고리즘이다 with C 언어

  박상현 지음

 

이 책은 박상현 저자님의 "뇌를 자극하는 알고리즘" 이라는 책의 후속작 입니다.

우선, 저자님의 이전 책인 "뇌를 자극하는 알고리즘" 책을 보지 못하여서 비교할 수 없지만,

이 책은 프로그래밍을 한다면 기본적으로 알아야 하는 자료구조와 알고리즘에 대해 군더더기 없이 깔끔하게 정리된 책입니다.

이 책은 총 4개의 Part로 구성되어 있습니다.

첫번째 Part는 Chapter 0 으로 0인 이유를 보면 자료구조, 알고리즘이 무엇인지를 먼저 설명하고, 그리고 이 책을 학습하기 위해 C 언어에서 기본적으로 알아야 할 부분들을 소개하고 설명하고 있습니다.

두번째 Part는 자료구조를 세번째 Part알고리즘을 학습할 수 있습니다.

여기까지만 보면 기본적으로 프로그래밍시에 많이 사용되는 자료구조와 알고리즘에 대해서 기본을 다질 수 있습습니다.

세번째 Part는 알고리즘 설계 기법으로 성능 분석하는 방법, 큰 문제에 대해 해결하기 위해 쉽게 해결 가능한 범위까지 분할 하는 방법 그리고, 동적 계획법, 탐욕 알고리즘, 백트래킹에 대해서 학습할 수 있습니다.

이 책을 학습하는데, C 언어에 대해서 최소한 읽을 수 있을 정도면 충분히 학습할 수 있습니다.

그리고 보통 자료구조와 알고리즘 책들을 보면 수학적인 지식이 필요한 부분들이 많은데, 이 책은 많은 그림들과 함께 기본 자료구조와 알고리즘에 대해 쉽게 다가갈 수 있도록 구성되어 있습니다.

 

각 Chapter 시작시에 학습 목표를 먼저 제시하여 해당 Chapter 를 통하여 습득할 수 있는 부분들 그리고 습득의 순서에 대해서 제시하고 있습니다.

 

각 어려울 수 있는 설명들을 그림이나 표등을 통하여 시작적으로 이해하기 쉽게 설명하고 있습니다.

 

책 내용 중간 중간에 "여기저 잠깐" 이라는 형태로 부연 설명을 통해 또 다른 생각해볼 부분에 대해 대화 하듯이 구성되어 있습니다.

 

그리고, 각 Chapter 마지막에 "연습문제"를 두어 자신이 제대로 학습했는지 판단 할 수 있도록 제공 하고 있습니다.

 

[ 결론 ]

프로그래밍을 학습하다 보면 기본적인 자료구조와 알고리즘에 대해서는 학습을 하는 경우가 많습니다.

하지만, 요즈음은 대부분 라이브러리 형태로 제공되다 보니 어떠한 형태로 자료구조나 알고리즘이 구현되어 있는지는 모르는 경우가 많습니다.

실제 라이브러리로 되어 있다보니 그 내부를 보지 못하거나 볼 수 있어도 함수 사용법만 학습하고 실제 어떻게 구현되어 있는지 그리고, 그 성능이 어떤지에 대해서는 생각하지 않는 경우가 대부분일 것입니다.

사실상 용도만 알면 이론 적인 부분을 몰라도 프로그래밍 하는데 크게 문제가 없긴 합니다.

하지만, 이론 적인 부분 및 구현 형태에 대해서 그리고 성능 측정 방법 등에 대해 알게 되면 좀 더 자신이 개발한 프로그램에 대해 최적화하는데 도움이 됩니다.

많은 자료구조 및 알고리즘 관련 책들이 많이 있지만 이 책은 자료구조와 알고리즘에서 가장 기본이 되는 부분들에 대해서 쉽게 학습할 수 있도록 구성되어 있습니다.

체계적으로 잘 구성되어 있어서 부담 없이 읽을 수 있는 책이었습니다.

  보통 자료구조나 알고리즘 관련 책은 생각만 해도 어려울 것 같고, 잠이 올 것 같다. 그래서 해야된다는 굳은 의지가 아니면, 보통 앞에서 3~4장을 보고 덮어두는 경우가 허다할 것이다.

그렇다면, 이 책으로 다시 한번 시작해보자. 글과 그림으로 재미있게 알고리즘을 이해할 수 있다. 처음부터 끝까지 전혀 지루하지 않게 읽을 수 있었다.

 

개인적으로 자료구조, 알고리즘 책은 2~3권 교차해서 읽으면 좋은데, 본인도 4권을 가지고 있다. 그 중 제일 재미없고 어려운 책은 대학 교재였다. 처음부터 이 책으로 시작했으면, 대학 교재가 이 책이었으면, 재미와 지식을 둘 다 가졌을텐데 하는 아쉬움이 들었다. 오히려 전공자에게는 알고리즘을 포기하게 만드는 단점이랄까~

 

모두 읽고 나니 비전공자도 쉽게 읽을 수 있는 난이도라고 생각한다. 다만 예제가 C언어인데, 개념을 익히는데, 전혀 문제가 되지 않는다. 오히려, 예제에서 연산을 하나하나 구현하므로, 다른 언어와 비교하면서 살펴보기를 추천한다.

 

책의 구성은 크게 3개의 파트로 되어 있는데, Part 01에서는 자료 구조(리스트, 스택, 큐, 트리)를 살펴보고, Part 02는 알고리즘(정렬, 탐색, 우선순위 큐와 힙, 해시테이블, 그래프)을 설명한다. 마지막 Part 03은 알고리즘 설계 기법(성능 분석, 분할 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹)에 관해 설명한다.

 

각 장을 설명하면 아래와 같다.

먼저, Chapter 00은 자료구조 개념과 알고리즘의 정의에 관해 알아보고, 앞으로 다룰 예제에서 꼭 필요한 C언어의 포인터, 구조체, 메모리 레이아웃(스택, 힙)으로 몸풀기를 진행한다.

본격적으로 Chapter 01에서는 리스트의 개념을 이해하고, 배열과 차이점, 링크드 리스트, 더블 링크드 리스트, 환형 링크드 리스트를 구현한다.

Chapter 02는 우리에게도 아주 익숙한 스택이다. 스택의 개념과 연산을 이해하고, 배열 기반 스택과 링크드 리스트 기반 스택을 구현한다.

Chapter 03은 큐의 개념과 주요 연산을 이해하고, 순환 큐와 링크드 큐를 구현한다.

Chapter 04는 트리다. 트리의 개념을 이해하고, 이진 트리와 수식 트리, 분리 집합을 살펴본다.

Chapter 05에서는 정렬의 개념을 이해하고, 버블 정렬, 삽입 정렬, 퀵 정렬을 구현한다.

Chapter 06은 탐색의 개념에 관해 알아보고 순차 탐색, 이진 탐색의 개념을 이해한다. 그리고 이진 탐색 트리와 레드 블랙 트리를 구현한다.

Chapter 07은 우선순위 큐와 힙(메모리 힙과는 다르며, 완전 이진 트리의 종류)의 개념을 이해하고, 힙 기반 우선순위 큐를 구현한다.

Chapter 08에서는 해시 테이블의 개념을 이해하고, 해시 테이블과 해시 함수를 구현한다. 또한 해시 테이블의 주소 충돌 해결 방법도 다룬다.

Chapter 09는 그래프의 개념과 표현 방법을 이해하고, 그래프의 순회 기법과 위상 정렬, 최소 신장트리 기법과 최단 경로 탐색 알고리즘을 살펴본다.

Chapter 10은 문자열 탐색 알고리즘의 개념을 알아보고, 카프-라빈 알고리즘, KMP 알고리즘, 보이어-무어 알고리즘을 구현한다.

Chapter 11에서는 알고리즘 성능 측정 기준(정확성, 작업량, 메모리 사용량, 단순성, 최적성)을 이해하고, 수행 시간의 개념과 표기법을 알아본다 .

Chapter 12는 알고리즘 설계 기법의 하나인 분할 정복을 알아본다.

Chapter 13은 동적 계획법의 개념을 살펴보고, 동적 계획법을 이용하여 피보나치 수 구하기, LCS(최장 공통 부분 수열) 알고리즘을 설계한다.

Chapter 14는 탐욕 알고리즘의 개념을 이해하고, 탐욕적 관점에서 그래프에서 배운 크루스칼과 데이크스트라(다익스트라) 알고리즘을 살펴본다. 허프만 코딩(데이터 압축)도 구현한다.

마지막, Chapter 15에서는 백트래킹 개념을 이해하고, 미로 탈출 알고리즘과 N개의 퀸 문제 풀이 알고리즘을 설계한다.

 

각 장의 시작은 학습 목표인데, 이 장에서 설명하는 핵심 개념과 학습 흐름을 정리한다. 핵심 개념은 알고리즘의 탄생 배경이라든지, 적절한 예시(나폴레옹의 전술, 그리스-로마 신화, 수학자 레온하르트 오일러의 이야기)를 들어 전혀 지루하지 않고, 흥미를 부추기며 알고리즘 속으로 독자를 끌어 들인다. 알고리즘을 설명할 때는 그림을 이용하여 단계별로 설명하므로 쉽고, 페이지도 금방금방 넘어간다. ㅎㅎ, 이어서 응용 알고리즘 설명과 C언어 구현 예제 및 실행 결과, 마지막 연습 문제로 마무리한다.

SE-51553ec7-8c4f-11ee-a0f5-a3e9dae88e4f.jpg

 

<깊이 우선 탐색 개념 설명>

 

중간 중간 "!여기서 잠깐", "NOTE"는 관련 용어이나 참고 사항, 보충 설명이 있을 때마다 나오니, 읽어 보고 참고하시면 된다.

 

이 책에서 좋았던 부분은 단연코 알고리즘과 관련하여 흥미를 끌만한 다양한 내용이며, 저자의 위트 넘치는 표현이다. 그리고 빼놓을 수 없는 부분이 예제의 완성도이다. 변수의 선언이라든지, 소스 코드 분리, 테스트 코드, 바로 현업에 사용해도 전혀 어색하지 않는다고 개인적으로 생각한다.

 

636페이지의 분량이지만, 읽다 보면 생각보다 빨리 읽을 수 있을 것이다. 개념을 설명하기 위한 그림과 예제가 많아서 이해하기도 쉽고, 읽기도 쉬웠다. 책 내용과 그림은 퍼플계열인데, 그 부분도 좋았다.

 

개인적으로는 10장의 문자열 탐색 알고리즘이 많이 어려웠다. 리뷰 다 쓰고 다시 읽어 봐야 겠다. 다른 장들은 비교적 어렵지 않게 읽혔다. 단점으로는 연습문제 답도 만들어 주세요~, 이러다 아무도 안 읽고 버려질 수 있어요. 제발~

 

마지막으로 우리가 알고리즘 책을 봐야하는 이유에 관한 저자의 인용 문구로 마무리하고자 합니다.

 

알고리즘을 체계적으로 공부하지 않아도 프로그래밍을 할 수 있지만, 더 나은 프로그래머가 되기 위해서는 알고리즘에 대해 제대로 알아둘 필요가 있습니다.

Chapter 00 알아두면 쓸 데 있는 자료구조와 알고리즘, p7

 

 

 

"한빛미디어<나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

#자료구조 #알고리즘 #이것이자료구조알고리즘이다withC언어 #이것이자료구조알고리즘이다 #한빛미디어 #박상현 # 다익스트라 #데이크스트라 #허프만코딩 

 

 


한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

이번에 서평을 할 책은 '이것이 자료구조+알고리즘이다.with C언어' 편 이다.

 

본격적인 chapter에 들어가기 전, 제일 앞부분 에선 자료구조와 알고리즘, c언어로 메모리를 다루는 방법들이 나오며, c언의 꽃이라고 불리는 포인터에 대한 것도 짧게 나온다.

 

 

Part01 에선 자료구조에 대한 방법들과 상세한 예제들이 나온다. 리스트, 스택, 큐, 트리 란 어떤 것인지가 나오는데 각 챕터마다 나눠서 최대한 자세히 알려주려고 하는 느낌이 난다.

 

 

Part02 에선 알고리즘에 대한 것이 나온다. 정렬, 탐색, 우선순위, 해시 테이블, 그래프 등이 마찬가지로 각 챕터마다 나뉘어서 나오는데 확실히 알고리즘은 어렵다. 포인터 보다 더 현기증 난다.

 

 

Part03에선 위에서 배운 알고리즘을 설계하는 기법을 알려준다. 알고리즘 성능을 분석, 분할 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹이 나온다. 마지막 예제들은 실습을 하기 위한 문제들이 나오는데 알고리즘 하면 빠질수 없는 그 친구 피보나치가 나온다. 

 

 

  

 

 

책을 읽는 것에 정신이 팔려서 문제를 풀어보진 못했지만, 앞부분을 복습하면서 풀어보면 좋을 것 같다. 개발 책을 볼 때마다 느끼는 거지만, 이런 연습문제를 많이 내서, 책 자체에 풀어보게 하는 것도 좋겠다는 생각을 했다.  

자료구조, 알고리즘이 좀 딱딱하다고 생각했는데요.

개념 설명이 잘 된어 있어서 처음 공부하는 사람들에게 무척 도움이 되는 책입니다.

예제 파일도 많이 있어서 다양한 정보를 확인할 수 있어서 좋았습니다.

 


 

 

총평

- 책의 난이도 : ★★★☆☆

- 추천 별점     : ★★★★★

- 추천 독자     :  C언어를 학습한 개발/인프라 엔지니어 혹은 취업준비생

- 지은이          : 박상현 지음

- 출판사          : 한빛미디어

- 코드 자료     :  https://www.hanbit.co.kr/support/supplement_survey.html?pcode=B9034896671

 

 


 

자료구조와 알고리즘은 컴퓨터 공학의 근간이 되는 부분입니다. 컴퓨터 공학을 전공하면 반드시 배워야 하는 과목이기도 하고, 취준생이라면 코딩테스트를 위해서 공부해야합니다. 그리고 사실 근본적으로 현업에 있는 사람이라도 절대 모르면 안되는 기본기이기 때문에 이를 모르고서는 어떤 문제를 해결하는데 근본적인 해결이 불가능할 것입니다.

 

이 책은 한빛미디어의 "이것이00이다" 시리즈의 책이기도 하고, 소프트 엔지니어 개발자이신 박상현님이 저술하신 책이기도 하기 때문에 아주 믿고 학습하기 좋은 책입니다.

 

특히 이 책은 C언어를 기반으로 하는데 컴퓨터 공학을 전공하신 분들이라면 C언어가 익숙하시리라 봅니다. 그래서 바로 학습을 진행할 수 있을 것이고 아무래도 자료구조와 알고리즘 같은 코어에 해당하는 내용은 C언어로 알아두는 것도 필요하다고 생각됩니다.

 

이 책의 초반부에는 학습로드맵이 있는데 처음 공부하는 분이라면 순차적으로 진행하면 되고 이미 알고 있는 사람이라면 사전식으로 필요한 부분을 골라서 재학습해도 될 것입니다.

 

 

 

 

 

첫번째 파트 1에서는 자료구조를 학습하는데, 정말 가장 많이 사용되는 리스트, 스택, 큐, 트리에 대해서 학습합니다. 그리고 파트 2에서는 정렬, 탐색, 우선순위 큐와 힙, 해시 테이블, 그래프, 문자열 탐색 알고리즘을 학습합니다. 이 두 개의 파트가 아무래도 매우매우 중요하다고 볼 수 있습니다. 그리고 이를 기반으로 파트 3에서는 알고리즘 설계 기법으로 성능 분석, 분할 정복, 동적 계획, 탐욕 알고리즘, 백트래킹 내용을 학습하는데 앞의 두 개 파트를 잘 학습하고 넘어가는 것을 추천드립니다.

 

특히 자료구조나 알고리즘을 학습할 때는 그림을 통해서 이해를 하면 훨씬 쉽게 이해할 수 있는데 이 책은 그림이나 도표 등을 적극적으로 활용하고, 예제코드도 한빛미디어 홈페이지에서 받을 수 있도록 제공하고 있습니다. 이런 학습자료를 적극적으로 활용하는게 중요합니다.

 

 

 

 

 

그리고 개념 중간중간에는 미니 퀴즈가 있는데, 읽다가 중요한 부분이 퀴즈가 됩니다. 그래서 내용을 잘 이해했는지 퀴즈를 통해서 확인해 볼 수도 있고, 만약 퀴즈의 답을 잘 모르겠다면 바로 위에 내용들을 다시 한 번 잘 정리해보기 바랍니다.

 

 

 

 

그리고 각 챕터의 끝에는 항상 연습문제가 있는데 이 챕터에서 반드시 알고 넘어가야할 내용이기 때문에 만약 여기서 틀린게 있다면 그 부분을 다시 돌아가서 학습하고 하루를 마무리 하시면 좋겠습니다.

 

 

 

 만약에 C언어를 통해 자료구조와 알고리즘을 학습해야 한다면 이 책을 강력 추천드릴 수 있을 것 같습니다.

 

 

 

이상으로 책 <이것이 자료구조+알고리즘이다>에 대한 리뷰를 마치겠습니다.

 

 

  "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

올해의 마지막 책 서평으로 "이것이 자료구조+알고리즘이다" 를 선택했다.
사실 Java로 작성된 알고리즘 책들을 많이 읽었는데... 
그렇다 보니 너무 Java에 Oriented 된 알고리즘 지식을 가질 듯 싶어 C로 된 책을 선택해 보았다.

전체적인 책의 구성은 알고리즘에 대한 배경 설명 ( History, 명명 사유 ) 을 설명하고, 알고리즘의 실제 구동 방식에 대해서 그림과 함께 상세히 설명 되어 있었다.

마지막으로 실제 작성된 코드를 실행해 봄으로써 해당 알고리즘을 숙지할 수 있게 구성되어 있었다.

 

그렇다 보니 프로그램 초심자도 쉽게 이해할 수 있게 작성이 되어 있고, C에 익숙하지 않은 독자에게도 부담스럽지 않게 읽을 수 있는 책이었다.

개인적으론 Java로 작성된 알고리즘 책을 읽으며 Greed Algorithm, BackTracking Algorithm에 대해서 새롭게 배우게 되었는데..

관련 Algorithm을 C로 작성한 예재를 보게 되는게 참 재밌는 경험이었다.

프로그램 입문자, C 입문자들이 알고리즘 공부하기 위한 좋은 입문서로 추천할 수 있는 그런 책이라 생각된다.

> 진행에 앞서

개발자로 취업을 꿈꾸고 있는 사람이라면, 많은 경우 이것부터 준비한다.

바로 코딩테스트이다.

비록 '코딩테스트 = 알고리즘 테스트'는 아니지만, 최소한 알고리즘에 대한 내용을 전혀 모른 상태에서 진행하는 것은 덧셈도 못하면서 곱셈에 도전하는 느낌이기에, 알고리즘은 어느새 많은 개발자들에게 부담아닌 부담으로 다가와 있는 상황이다.

그리고 그 알고리즘에 대한 기본기를 다지기 위해서는 자료구조를 잘 알아야 한다.

물론 고급언어 기준으로는 다양한 자료구조에 해당하는 클래스 및 함수를 제공하고 있기 때문에, 이런 부분에 대한 깊이 없이도 쉽게 처리할 수는 있지만, 어느정도 올라가다보면 한계에 부딪히게 된다. 기본기가 부족하기 때문에 발생하는 현상이라고 생각한다.

이에 대해 많은 개발자들이 잘 받아들일 수 있도록 고민한 책을 접하게 되었다.

 

> 책에 대한 간단한 정보

표지에서 눈에 띄는 것은 '이야기'이다.

이 책의 표지는 깔끔하지만, 인상적인 한 마디를 적어 두었다.

'위트 넘치는 이야기로 자칫 지루할 수 있는 자료구조+알고리즘 개념을 즐겁게 배운다.'

이 이야기가 전체의 맥을 잘 잡고 표현했다고 생각한다.

책 전체가 이야기를 전해주는 느낌을 주기 때문이다. 그래서 책을 읽는다기 보다는 책을 듣는다는 느낌에 좀 더 가까웠다.

직접 흐름을 잡아 끌어주기 때문에, 내 스스로의 포기 의지만 없다면 자연스럽게 하나씩 익히기 좋은 느낌이다.



> 인상깊은 부분들

저자의 강조점

저자는 머릿말에서 알고리즘이라는 것 자체가 모든 프로그래머에게 필요한 것이 아닐 수 있다고 이야기 한다. 하지만, '좋은' 프로그래머가 되기 위해서는 큰 보탬이 된다고 말한다. 즉, 프로그래머로 그냥 밥벌어 먹는 것 외에는 큰 비전이나 목표가 없는 사람이라면 애초에 관심이 없겠지만, 계속 성장하고 더 큰 일을 할 수 있으며, 높은 이상을 바라보는 프로그래머라면 자료구조와 알고리즘은 매우 중요한 요소임을 역설적으로 말하고 있다.

검증된 표준 라이브러리를 사용하는 것은 현대 프로그래머의 축복과도 같은 상황이지만, 그것을 연장통으로 볼 때, 그 연장통 안의 도구를 적절히 사용하려면 그것을 올바르게 알고 있어야 한다는 것도 말하고 있다. 참 설득력이 있다고 생각한다.


이 장의 학습 흐름을 장의 첫 쪽에 담아두었다.

매 장을 시작할 때면, 이 장의 학습흐름이 눈에 띄었다. 이것은 스택에 대한 장을 예시로 든 것인데, 스택을 익히기 위해서 다음의 흐름으로 말할 것이라는 예고편이다. 스택이 어떤 것인지 개요부터 시작하여, 가벼운 스택의 구현방법과 그 스택으로 계산기를 구현할 수 있다는 것을 알려준다. 다른 장도 대부분 마찬가지이지만 이 흐름이 그렇게 딱딱하게 느껴지지 않아서 좋았으며, 그만큼 많은 노력이 들어갔다는 점이 느껴졌다. 


설명방식의 예

앞서 살펴본 내용의 연장선이다. 스택에 대해서 설명한 내용인데, 이 내용을 설명할 때 그림을 적극 활용하였다. 이 그림이 아니었다면, 매우 추상적이었을 것이고, 애초에 자료구조에 대해 잘 이해하고 있던 사람이 다시 상기할 때는 상관없었을 것이다. 하지만, 그렇지 않았다면, 추상적인 설명은 이 책을 덮게 만들었을지도 모른다. 어떻게든 그림으로 잘 표현하려고 노력한 이와 같은 부분이 다른 부분에서 쉽게 찾아볼 수 있다.

스택을 이용한 연산에서는 당연하게도 많이 쓰이는 후위연산자 표기방법을 사용하여, 어떻게 연산을 수행할 수 있는지 보여준다. 스텝 바이 스텝의 형식으로 표현했기 때문에 누가봐도 크게 어렵지 않을 것이다.


책의 뒷표지

이 책에서 다루고 있는 내용을 나열식으로 기록한 것이 특징이다. 알고리즘 부분에서는 '분할 정복', '탐욕 알고리즘' 등 알고리즘 공부좀 해봤다면 한 번쯤은 들어봤을 법한 용어들을 알려주고 있다.

이 책은 이론에 관한 책이 많으나 실습으로 그것을 이해하는 데 도움을 주고 있다는 점 또한 말하고 있으며, 그것에 그치지 않고 응용을 할 수 있는 알고리즘의 내용까지 이어지고 있기 때문에 많은 사람이 이 책을 필요로 하고 있다는 점을 알려주는 듯한 느낌이 든다.



> 괜찮은 부분

  1. 알고리즘 공부를 할 때 원리부터 파악하도록 도움을 준다.
    각종 도표를 적극 활용하여 설명하려고 노력한 흔적이 많이 보인다. 특히 메모리를 블럭화하여 표현한 부분이 상당히 많은데, 그만큼 추상적으로 되어 있어서 이해하기 어려운 부분에 대해서 이해하기 쉽도록 도와주고 있다고 생각이 든다. 이를 테면, 초반에는 더블포인터에 대해서도 왜 사용해야만 하는지에 대해, 그렇지 않을 경우 어떤 문제가 발생하는지 알려주는 방식을 이용하여 모를만한 부분도 반드시 짚고 넘어갈 수 있도록 도와주고 있다.
  2. 자료구조 및 알고리즘 작성시 성능에 유리한 C를 채택하였다.
    요즘엔 많은 알고리즘 책이 파이썬 기반으로 되어있다. 물론 본인이 익숙한 언어를 사용하여 알고리즘을 작성하는 것은 필요하다고 생각하지만, 고급언어로 갈수록 상대적으로 성능이 떨어지기 마련이다. 그래서 가끔 성능을 최적화하지 못해서 주어진 조건을 통과하지 못하는 경우도 많은데, 이 책에서 소재로 사용하고 있는 C 언어에 익숙하도록 노력한다면 충분히 문제를 해결하는 데 도움이 될 것이라고 생각한다.
  3. 강의시 교재로 사용하기 좋은 분량이다.
    총 15개의 장으로 구성되어 있다. 그래서 개인이 강의 교재로 사용할 수도 있고, 그룹 스터디 교재로 사용하기에도 좋다. 약 반년 정도의 분량으로 적절해 보인다. 물론 대학 강의교재로 사용하기에도 적절해 보인다. 물론 난이도는 그렇게 낮지는 않으나, 그만큼 해당 기간을 적절히 분배하여 집중해서 공부한다면, 이 책은 좋은 길잡이가 될 것이다.

> 아쉬운 부분

  1. C를 처음 접하는 사람에게는 예제 실행이 어려울 수 있다.
    단순히 C언어에 대한 난이도 문제라기 보다는 C언어로 개발 했을 때 빌드 환경을 구성하는 방법 및 빌드 방법 등에 대해서 어려움을 겪을 수 있다. 이 책은 순수하게 자료구조 및 알고리즘에 집중했기 때문에, 별도로 C언어로 개발된 예제 프로그램을 어떻게 빌드하면 되는지 그 과정을 안내하고 있지는 않다. 물론 이 정도는 개인이 찾아보기 쉬운 부분이지만, 부록에서라도 간단하게라도 알려주면 좋았을 것 같다.
  2. 꼼꼼하게 보지 않는다면 예제코드는 어렵게 느껴질 수 있다.
    예제코드의 부분 수록이 아닌 전체 수록이 되어있다는 점에서는 매우 긍정적으로 생각한다. 그래서 실행할 수 있는 사람이라면, 이 코드를 정상 작성만 한다면 일단 결과를 보는 데에는 어렵지 않게 도달할 수 있다. 하지만, 예제코드를 라인별로 설명하는 주석이 있지는 않기 때문에 이해가 어려운 코드가 있을 수 있다고 생각한다. 이 부분을 앞에서 설명한 내용과 잘 맞춰보면 이해가 되겠지만 그만큼 꼼꼼히 되짚어봐야만 하는 시간 투자가 필요해진다.
  3. 연습문제에 대한 답을 제공하지는 않는다.
    물론 답이 한가지만 있지는 않기 때문에 자유도를 높이기 위해 그렇게 제공한 것일 수도 있고, 아니면 교수학습을 위해서 의도적으로 제거했을 수도 있다. 하지만 어느정도 가이드가 있다면, 본인이 풀어본 내용이 의도한 질문에 맞게 답을 한 것인지 파악하는 데 도움이 되지 않을까 하는 생각에 아쉬움은 들었다.

 

> 추천 독자

- 취업이나 이직을 앞두고 있는 개발자

- C언어에 대한 간단한 지식을 갖고 있으며, 그 기반으로 자료구조와 알고리즘 공부를 하고자 하는 개발자

- 사내 혹은 외부에서 자료구조와 알고리즘에 대한 스터디를 진행하고자 하는 개발자

- 코딩 테스트 공부를 진행하는 도중 최적화에 관심이 많고, 개발한 코드의 성능을 올리고자 하는 개발자

 

> 개인적인 평점

- 가격: 8 / 10

- 내용: 10 / 10

- 디자인: 8 / 10

- 구성: 9 / 10

 

> 정보

저자: 박상현

출판사: 한빛미디어

가격: 34,000원

전체 페이지: 644페이지

 

** 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

책 구성은 크게 3단계로 이뤄진다.

1단계: 자료구조, 알고리즘 정의를 설명하고 C언어 기본문법을 복습한다.

2단계: 자료구조 -리스트, 스택, 큐, 트리

3단계: 알고리즘 -정렬, 탐색, 우선순위 큐와 힙, 해시 테이블, 그래프, 문자열 탐색

예전에 유튜브에서 봤는데 C로 자료구조를 공부하면서 자료구조마다 속도가 어떻게 달라지는지를 인지하는 게 좋다고 한다. 

자료구조를 이해하는데 C의 구조체와 포인터를 사용하면서 이해해보자.

그리고 그 단계가 지나면 알고리즘에 자료구조를 활용한다. 이때는 C++이나 자바를 사용한다.

자바의 경우 객체지향이 있다. 알고리즘을 개선해 효율성을 높이는 경험을 쌓는다. 

그 다음에 응용분야로 넘어가면 된다. 

챕터 2: 자료구조

1. 리스트

-append, insert, remove, getat(특정노드 반환)

 

-배열과의 차이 : 배열은 생성시점에 배열의 크기 지정 필수, 생성 후에는 크기 변경 불가

but 리스트는 유연하게 크기를 바꿀 수 있음

 

-링크드 리스트 : 노드를 연결해서 만든다. 

데이터 + 다음 노드에 대한 포인터로 이뤄짐

헤드(첫 번째 노드), 테일(마지막 노드)

 

-노드 생성에 자동메모리가 적합하지 않음(자동메모리상에 생성된 지역변수가 return문이 실행되면 제거가 되어 해당 변수의 메모리를 가리키는 포인터는 오류가 나게 됨)

-노드 생성에는 자유저장소 사용 : 메모리 할당 malloc() 함수 사용

 

-sizeof(Node) : 해당 Node리스트의 길이

-sizeof(*Node) : 포인터가 Node리스트의 0번째 주소를 가리키기 때문에 1이 나옴

 

-링크드 리스트의 단점 : 다음 노드를 가리키는 포인터로 추가 메모리가 필요, 특정 위치에 있는 노드 찾는 비용이 크다.

-링크드 리스트의 장점 : 레코드의 추가, 삽입, 삭제가 잦지만 조회가 드문 작업에서 유리함

예) DB에서 조회하던 레코드를 순차적으로 다룰 때

 

2. 스택

-입출력은 스택의 꼭대기에서만 이루어짐

-후입선출

-자동메모리도 스택임(지역 변수는 스택에 할당된다)

-대부분의 네트워크 프로토콜이 스택임

-이미지 편집 프로그램의 되돌리기도 스택

 

-구현방법 

1) 배열 : 용량을 동적으로 변경시 비용이 크지만 구현이 간단함

2) 링크드 리스트 : 스택 용량에 제한이 없음

 

 

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

 

1.jpg

 

요즘 개발자들이 주로 사용하는 개발 언어(C#, 자바, 코틀린, 파이썬)에서는 리스트, 스택, 큐, 트리 등의 자료 구조 뿐만 아니라 탐색, 정렬 등의 알고리즘을 표준 라이브러리로 제공합니다. 그래서 개발자들은 어플리케이션에 맞게 표준 라이브러리를 선별해서 사용하면 되며. 직접 자료구조나 알고리즘을 구현하는 것은 버그를 유발할 수도 있기 때문에 이미 검증된 표준 라이브러리 사용을 권장하고 있습니다. 자료구조와 알고리즘의 개념에 대해 간단히 설명하자면 자료구조란 데이터 보관 방법 & 데이터에 관한 연산의 총체를 뜻한다고 볼 수 있습니다. 창고에 화물을 넣을 때 다양한 보관 방법이 있듯이 컴퓨터 안에서 있는 데이터들의 다양한 보관방법들과 그 데이터들을 더하고 빼고 나누는 등의 다양한 '연산'을 할 수 있는 것이라고 할 수 있습니다. 알고리즘은 목적지로 가는 방법이 다양하게 있는데, 지하철, 도보, 택시, 자전거 등등 엄청나게 많은 방법들 중 어떤 방법으로 가야 최대한 짧은 시간에 효율적을 갈 수 있는지에 대한 정답을 찾고 적용하는 개념이라고 볼 수 있습니다. 이러한 알고리즘은 유튜브, 인스타 같은 SNS, 정보보안측면에서는 블록체인 같은 암호화에 많이 적용되고 있습니다. 

 

제가 이 책을 선택한 이유는 이 책이 독자가 마지막 페이지까지 읽게 하는 것을 목표로 집필되었기 때문에 자료구조와 알고리즘을 처음부터 제대로 배우고자 하는 사람들의 눈높이에 맞춰 리스트부터 백트래킹까지, 위트 넘치는 이야기로 쉽게 설명하고 있기 때문입니다.

 

이 책의 특성은 보기만 해도 머리가 아파지는 복잡한 수식은 최소화하고 한눈에 들어오는 그림을 많이 넣었으며, 바로 실행하고 확인할 수 있는 108개 소스 코드를 예제로 제공해 알고리즘의 얼개를 완벽히 이해할 수 있도록 구성되었다는 점입니다.

 

구성

Chapter 0: 알아두면 쓸 데 있는 자료구조와 알고리즘

 

PART 1: 자료구조

Chapter 1: 리스트

Chapter 2: 스택

Chapter 3: 큐

Chapter 4: 트리

 

PART 2: 알고리즘

Chapter 5: 정렬

Chapter 6: 탐색

Chapter 7: 우선순위 큐와 힙

Chapter 8: 해시 테이블

Chapter 9: 그래프

Chapter 10: 문자열 탐색

 

PART 3: 알고리즘 설계 기법

Chapter 11: 알고리즘 성능 분석

Chapter 12: 분할 정복

Chapter 13: 동적 계획법

Chapter 14: 탐욕 알고리즘

Chapter 15: 백트래킹

 

파트별로 나누어 봤을때 0장은 본격적인 학습에 앞서 자료구조와 알고리즘의 정의 그리고 C언어로 메모리를 다루는 방법에 대해 설명하고 있고, 1~4장은 4가지 자료구조를 살펴보면서 데이터를 효율적으로 관리하는 기법에 대해, 5~10장은 정렬부터 문자열 탐색 알고리즘까지 총 6가지 알고리즘에 대해, 11~15장은 알고리즘의 성능을 분석하는 방법과 알고리즘을 설계하는 몇가지 기법에 대해 설명하고 있습니다.

 

 

개인적인 생각으로 학습은 컴퓨터공학 전공자로 자료구조와 알고리즘을 제대로 배우고 싶으신 분, 소프트웨어 개발자로 취업 및 이직을 희망하시거나 이제 막 개발자로 시작한 초보자이신 분들께서는 C언어에 관한 기본적인 학습 내용을 다루는 도서를 먼저 선독하신 후에 0장부터 시작하시면 좋을 것 같고 어느정도 경험이 있으신 분들(2년차~)부터는 0장은 쭉 훓으시면서 자료구조와 알고리즘의 정의 및 C언어로 메모리 다루는 방법에 대해 복습한다는 방식으로 보시고 1장부터 학습하시는 것이 좋을것 같습니다.

 

 

개인적으로 약간의 단점이 어쩌면 욕심일수도 있는게 좀더 많은 실습 예제 및 비즈니스 케이스가 담겨있으면 더 좋았지 않았을까라는 아쉬움이 있습니다.

 

 

저의 리뷰를 읽어주셔서 감사합니다. 다음에는 좀더 유용하고 좋은 책으로 더 나은 리뷰를 통해 여러분께 책을 소개시켜드릴 수 있도록 더 노력하겠습니다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

4637.jpg

 

개발자에게 자료구조와 알고리즘은 필수 항목이라고 생각한다. '뇌를 자극하는 알고리즘'의 저자 박상현님도 '좋은' 프로그래머가 되려면 눈앞의 문제에 적절한 자료구조와 알고리즘을 적용할 수 있어야 한다고 얘기한다. 반드시 할 필요는 없지만, 해두면 좋다는 의미이다.

 

4638.jpg

 

​요즘 개발자들이 주로 사용하는 개발 언어(C#, 자바, 코틀린, 파이썬)에서는 리스트, 스택, 큐, 트리 등의 자료 구조 뿐만 아니라 탐색, 정렬 등의 알고리즘을 표준 라이브러리로 제공한다. 그래서 개발자들은 어플리케이션에 맞게 표준 라이브러리를 선별해서 사용하면 된다. 직접 자료구조나 알고리즘을 구현하는 것은 버그를 유발할 수도 있기 때문에 이미 검증된 표준 라이브러리 사용이 권장된다.

 

대부분의 프로그래머들이 자료구조나 알고리즘의 내부 구조나 동작원리를 알고 있기 때문에 표준 라이브러리를 사용해도 무방하지만, 필요에 따라서는 직접 구현해야 할 때가 있다. 그리고 직접 구현하면 표준 라이브러리보다 어플레이케이션에 맞게 보다 더 좋은 성능을 낼 수도 있다.

 

​박상현 님의 '뇌를 자극하는 알고리즘'은 2009년에 출간되어 많은 개발자들의 호응이 있었고, 2022년 '이것이 자료구조+알고리즘이다 with C언어'라는 이름으로 리뉴얼되어 출간되었다.

 

​책은 제목 그대로 리스트, 스택, 큐, 트리 등의 자료구조와 정렬, 탐색, 우선순위 큐와 힙, 해시 테이블, 그래프 등의 알고리즘을 다루고 있다. 그리고 마지막 Part III에서는 알고리즘 성능 분석, 분할 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹 등 알고리즘 설계 기법도 학습하도록 구성되어 있다.

 

4639.jpg

 

2009년의 책 내용이 잘 기억이 나지 않지만, 개인적으로도 C언어로 구현된 코드를 오랜만에 만나니 반가웠고, 또 새로웠다. 개발자에게 상당히 중요한 내용을 다루고 있기 때문에, 오랜만에 만나는 자료구조와 알고리즘의 내부 구조와 동작을 코드로 만났는데, 저자의 꼼꼼함과 편집의 도움으로 불필요한 내용은 거의 없고, 딱 필요한 내용만을 담고 있어 좋았다. 특히 각각을 설명하기에 앞서 저자가 들려주는 소소한 이야기에 더 집중할 수 있었다.

 

4640.jpg

 

저자는 많은 독자들이 이 책을 마지막 페이지까지 읽게 하는 것을 목표로 삼았다고 했다. 중도에 포기하는 사람들이 많기에 최대한 끝까지 함께 하려는 저자의 의도가 느껴졌다. 책의 예제들도 자료구조와 알고리즘을 학습하는 이들에게 큰 도움이 된다. 이것이 자료구조+알고리즘이다 라는 책과 함께 더 나은 개발자가 되도록 노력해보자.

 

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

 

#이것이자료구조+알고리즘이다 #C언어 #자료구조 #알고리즘 

대학교 학부 컴공 전공 2학년 때 배웠던 자료구조, 3학년 때 배웠던 알고리즘. 배운만큼 소화를 시키지 못하여 피상적으로이해한 후에 과제 때 구현하고 시험보고 잊어버렸던... 어려운 과목이었습니다.

 

그런데 직장인이 되어 소스코드를 분석하는 업무를 하다보니 C로 된 프로그램 중에 자료구조를 사용한 소스코드들이 꽤 있었습니다. 검색 시에도 효율적인 정렬, 검색 알고리즘을 적용한 소스코드들이 많았습니다. 실행 속도를 높이기 위하여, 혹은 저장공간의 효율성과 문제 해결을 위한 목적 등 다양한 용도로 자료구조와 알고리즘을 사용하고 있었습니다.

 

 

 

 

저는 실제 업무간에 쓰일 법한 자료구조/알고리즘 소스코드와 그 원리에 익숙해지기 위해서 이 책을 관심있게 읽었습니다. 업무간에 활용되는 목적뿐만 아니라 전산직렬 공무원 시험에도 과목으로 포함되어 있고, SW 회사에서도 입사 면접에서는 자료구조/알고리즘 부분을 많이 물어보기 때문에 자료구조와 알고리즘은 IT 분야에서 기본적인 소양으로 꼭 이해하고 있어야 할 것입니다. 

 

이 책은 제목처럼 C언어로 짜여진 소스코드로 자료구조, 알고리즘을 설명하고 있습니다. 전공자여서 용어들이 익숙해서 쉽게 읽히는 건지는 몰라도 지루하지 않게 설명이 되어 있습니다. 

앞서 자료구조와 알고리즘의 개념을 설명하고 C언어 포인터 등을 통해 메모리를 다루는 방법을 기본개념으로 설명하고 그 이후에 세부적인 자료구조 종류와 알고리즘 종류를 다루고 있습니다.

 

이 책에서는 자료구조를 왜 공부해야 하냐는 질문에 "자료구조에 따라 애플리케이션의 성능이 크게 달라질 수 있기 때문에 자료구조 지식을 갖고 있으면 적절한 자료구조를 선택할 수 있다"고 하면서 "자료구조는 데이터를 효율적으로 사용할 수 있게 해주는 핵심 부품이므로 자료구조를 모르면 알고리즘을 공부하기 어렵다"고 하였습니다.

 

알고리즘을 왜 공부해야 하냐는 질문에는 "자원을 효율적으로 활용하고 고성능의 코드를 작성하여 메모리와 프로세싱 파워를 이해한 상태로 문제를 효과적으로 해결할 수 있기 때문이다" 라고 설명하였습니다.

 

단원별로 연습문제도 수록되어 있는데 아쉽게도 해답은 별도로 제공하지 않습니다. 

 

이 책을 보니 옛날 수업을 듣던 생각도 났습니다. 대학생이라면 수업의 복습 겸 자습 서브교재로 한번 읽어보면 이해가 더 쉬울 책이라고 생각이 듭니다. 

 

" 이 책은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성한 서평입니다 "

이것이자료구조.jpg

 

이 책은 제목 그대로 자료구조와 알고리즘을 설명한 책입니다. 자료구조나 알고리즘 하나의 주제만으로도 상당히 내용이 많은데 이 두 가지를 모두 담고 있으니 그 책의 분량은 짐작할 수 있듯이 600페이지가 훌쩍 넘어갑니다.

조금 특이하게 생각했던 것은 자료구조라고 하면 떠오르는 리스트, 스택, 큐, 트리를 앞부분에서 다루고는 있었으나 우선순위 큐나 해시 테이블은 알고리즘 파트에서 다루고 있었다는 점입니다. 아무래도 기본적인 자료구조를 응용해서 우선순위 큐의 연산이나 해시 테이블의 처리를 다뤄야 하기 때문에 알고리즘 방식에 더 중점을 둔 것이 아닌가 싶습니다.

이 책의 전신은 ‘뇌를 자극하는 알고리즘’이라는 것을 저자가 서문에서 밝히고 있습니다. 그 책을 읽어본 적은 없지만 리뉴얼된 책이라 그런지 내용이 짜임새가 좋고 탄탄하다는 느낌을 받았습니다. 각 장의 처음에는 주제의 개념을 다루고 있습니다. 개념 설명을 적절한 다이어그램과 함께 쉽게 설명을 해주고 있고 간간이 일상적인 사례와 비유를 해서 내용이 잘 다가오도록 구성이 되어 있습니다.

그다음으로는 조각 코드를 보여주며 개념을 어떻게 구현하는지를 설명합니다. 프러시저 언어를 지향하는 C언어를 통해 구현을 하고 있기 때문에 좀 더 간결한 구현 내용을 확인할 수 있습니다. 자료구조보다는 알고리즘에 좀 더 방점을 맞춰져 있다고 생각이 듭니다.

내용은 점점 심화된 내용으로 진행이 되지만 기본부터 탄탄히 쌓았기 때문에 접근 장벽이 그리 높게 느껴지지 않았습니다. 어려울만한 코드가 눈에 들어오기 시작하니 재미가 오히려 붙는 느낌이 들었습니다.

이렇듯 각 장마다 통일성 있게 구성이 되어 있다 보니 다음 장의 내용도 부담스럽지 않게 받아들일 수 있고 더 흥미로움을 가질 수 있었습니다.

가장 기억에 남는 장은 '탐색'을 주제로 한 부분이었습니다. 탐색의 개요로부터 시작한 내용은 탐색 방법을 폭넓게 다루면서 각각을 상세한 예를 들어 설명을 해줍니다. 또한 C언어로 구현한 부분을 보여줘서 더욱 구체화해줍니다. 이진 탐색을 설명 후 한계점까지 보여줍니다. 그리고 다시 이 한계점을 개선하기 위한 레드 블랙 트리를 설명합니다. 내용 전개의 짜임새가 잘 되어 있어서 이해를 하는 것에 많이 도움이 된 것 같습니다.

취향의 차이일 수도 있겠지만 한 가지 아쉬운 점이라면 각 장의 마지막에는 전체 코드가 등장한다는 점입니다. 개념 설명 중에 구현 코드도 충분히 보여주고 설명을 했기 때문에 굳이 코드를 다 포함할 필요가 있나 싶기도 했고, 부담감을 줄 수 있는 책의 분량을 늘리는 대도 한몫을 하지 않았을까 싶습니다. 예제 코드를 담아 놓은 사이트 주소만 남기더라도 충분할 것 같습니다. 코드 분석은 책보다는 직접 IDE 환경에서 하는 것이 더 효율적인 것 같습니다.

반가운 책이었습니다. 자료구조나 알고리즘을 다룬 책들을 읽어본 적이 있었지만 가장 만족스러운 책이었습니다.

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

KakaoTalk_20221230_164656773.jpg

이것이 시리즈 중 자료구조와 알고리즘이 합친 책이 등장했다.

예전에 'C언어로 쉽게 배우는 자료구조' 책이 유명했지만, 그보다는 이 책이 훨씬 더 깔끔하고 좋다.

제목에 with C언어를 붙여서 혼동을 최소화 시킨 것도 마음에 들었다.

자바와 파이썬 왕국에서 C언어로 책을 쓰다니! 라는 사람들이 있을 것 같지만,

자료구조만큼은 메모리 관리가 가능한 언어로 학습해야된다는 것이 내 지론이다.

이유는 어떠한 언어를 쓰던 컴퓨터 내부적으로는 비슷하게 동작하는데, 특히 자료구조의 경우 메모리 구조를 알고 있어야 이해하기 쉽기 때문이다. 따라서 C언어를 통해 메모리 관리를 직접 해보면서 자료구조의 동작 원리를 이해하는 것이 좋다.

이 부분에 대해서는 홍정모 박사님께서도 비슷한 얘기를 해주셨다.

참고 영상 : https://youtu.be/HN8PPPjJ4R8

 

KakaoTalk_20221230_164656773_01.jpg

 

처음에는 기본적인 자료구조에 대해 학습하게 된다.

리스트, 스택, 큐, 트리를 보고 이를 이용하여 정렬, 탐색, 해시 테이블, 그래프 알고리즘을 공부하는 방향으로 구성되었다.

C언어를 사용하지만 책의 제목대로 자료구조와 알고리즘에 관한 책이기 때문에 포인터에 대한 내용은 최소화시킨 것이 눈에 띄었다. 내가 가장 싫어하는 책이 제목과 상관없이 언어의 기본 사용법으로 쪽수를 잡아먹는 것이다. 그러나 검증된 시리즈답게 포인터를 왜 사용해야 하는지, 이에 대한 부분만 확실하게 집어주고 곧바로 본 내용으로 들어간다.

 

책의 쪽수는 664쪽으로 생각보다 두툼한데, 책에서 설명하는 예시 코드가 중괄호를 줄의 시작과 끝에 사용하는 방식을 사용했기 때문이다. C언어 진영에서 많이 사용하는 방식 그대로 사용한 것이지만, 이부분은 책의 가격을 위해서 자바진영처럼 줄의 마지막에 중괄호를 써서 쪽수를 줄이는 방식을 사용했으면 어떤가 싶었다.

 

KakaoTalk_20221230_164656773_02.jpg

 

책의 중간중간 이런 자료구조나 알고리즘을 배워서 어디에 사용하는지를 설명해준다. 쓰레기 책들은 '보통 자, 자료구조에는 이러이러한게 있어요. 그럼 다음 내용으로...' 이런 구성인데, 역시 명성대로 초보자들의 궁금증을 확실히 해결해준다. 이뿐만 아니라 중간중간 재미있는 에피소드들을 얘기해주면서 전반적으로 지루하지 않게 해준다.

 

KakaoTalk_20221230_164656773_03.jpg

 

알고리즘의 핵심은 역시 특정 문제에 대해 얼마나 효율적으로 해결할 수 있는가이다. 때문에 가벼운 수학 공식이 들어가 있기도 한다. 그렇기 때문에 이 책을 구입하는 사람들이라면 최소한 위의 내용을 거부감없이 받아들일 수 있어야 한다.

시중에 나와있는 많은 자료구조 책들이 있지만, 역시 메모리를 직접 관리할 수 있는 언어로 집필된 책이 많다. 아무리 주로 사용하는 언어가 자바나 파이썬이라고 할지라도, 최소한 자료구조 공부만큼은 이 책이나 메모리를 직접 관리할 수 있는 언어로 공부했으면 좋겠다.

 

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

이것이 자료구조+알고리즘은 굉장히 친절한 설명으로 두고 두고 천천히 읽어보고 싶어졌습니다. 오랫만에 다시 자료구조+알고리즘을 공부하는 것도 많은 도움이 될거 같아서 리뷰는 이정도로 마쳤지만 실습을 하면서 천천히 조금더 읽어보고 싶어 지는 책이였습니다.

컴퓨터공학과 2학년 학생분들에게 추천드리고 싶은 책입니다. 2학년때 자료구조 알고리즘을 했었던게 생각이 나네요 :)

컴퓨터 언어에 대해 다룬다고 하면 무조건 필수라고는 안하지만(?) 안 하는 사람은 없을 것이다. (즉, 모르면 손해 정도랄까)

 

그 와중에도 그렇게 대중적이진 않지만 심오한(?) C언어로 해당 책은 구성되어 있다.

 

책의 구성은 다음과 같다.

 

 

자료구조와 알고리즘 순서대로 각각의 종류에 대해 알려주고 있다. 그리고 후반은 알고리즘 설계 기법이라는 챕터로 상황별 알고리즘 설계기법과 성능 측정법에 대해 알려준다.

 

어떤 알고리즘이 어떤 성능을 발휘하는지에 대해 알고 있어야 적재적소 필요할때에 알맞게 사용할 수 있기 때문이다.

 

챕터 0에서는 자료구조와 알고리즘이 뭔지 왜 배워야하는지에 대해 간단히 설명해주고 있어서 상기시켜줄 수 있어서 좋았다.

 

우선 자료구조란? 데이터 보관 방법 & 데이터에 관한 연산의 총체를 뜻한다고 한다.  창고에 화물을 넣을 때 다양한 보관 방법이 있듯이 컴퓨터 안에서 있는 데이터들의 다양한 보관방법들과 그 데이터들을 더하고 빼고 나누는 등의 다양한 '연산'을 할 수 있는 것이라고 할 수 있다.
이걸 왜 배워야하지라는 의문이 생길 수 있다.

자료구조를 왜 배워야하지??라는 의문에 대한 대답을 해주고 있다. 나도 학부생 시절에 딱딱한 교과서를 보면서 자료구조는 이런 게 있고 이런 것이다라고 만 말로만 들으면 관심도 없었고 흥미도 없었다. 하지만 실제로 매우 많이 필요한 기법들이 있고 유용하다.

 

요약하자면, 1. 자료구조의 내부를 이해하면 이상한 자료구조를 선택하는 일을 피할 수 있다. 2. 자료구조 및 알고리즘은 데이터를 효율적으로 사용할 수 있게 도와주는 핵심부품역할을 한다.라고 정도 책에서는 대답해주고 있다. 자세한 설명은 책을 참고하자.

 

책에서 알고리즘에 대한 정의를 "어떤 문제를 풀기 위한 단계적 절차"라고 설명하고 있다.

 

내가 이해했던 알고리즘에 대해 설명하자면 A지역에서 B지역으로 가는 방법이 다양하게 있는데, 지하철, 도보, 택시, 자전거 등등 엄청나게 많은 방법들 중 어떤 방법으로 가야 최대한 짧은 시간에 효율적을 갈 수 있는지에 대한 정답을 찾고 적용하는 게 그게 바로 알고리즘이라고 생각한다.

 

 

그리고 C언어에서 메모리를 다루는 방법에 대해 설명해준다. (프로그래밍 언어를 입문할 때 C언어 포인터에서 많이들 포기한다고 하던데...)

 

해당 책에서는 C언어의 복습하는 식으로 접근하고 있어서, 핵심만 간단하게 설명해주고 있다. C언어 자체의 기초를 모른다면 별도의 책을 사서 보는 게 좋긴 할 거 같다.

 

이후엔 챕터에서 본 것처럼 각각의 자료구조 및 알고리즘에 대해 설명해주는데 각 챕터가 시작할 때 특정 방법들에 대한

학습 목표라는 페이지에서 핵심 개념 및 학습흐름이라고 정리해주는 부분이 좋았다고 생각한다.

 

 

 

 

나는 주로 C++언어를 많이 다루면서 C언어에 대한 간단한 복습도 해주면서 자료구조 및 알고리즘에 대한 참고서로 소장하기엔 해당 책은 좋은 것 같다.

 

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

tia1.jpg

프로그래밍을 공부하다보면 처음엔 이것저것 만들어 본다. 일단 되게 만든다. 그 후 어느 정도 실력이 늘면 되게 하는 것에서 만족하지 못한다.

그럴때 배워야 하는 것이 알고리즘과 자료구조다.

요즘 나오는 다른 자료구조, 알고리즘 책과 달리 C언어를 기본으로 설명하고 있다. C언어에 대한 이해와 복습이 이 책을 읽기 전에 필요하다. (포인터, 구조체 등)

첫번째 파트는 1장부터 5장까지 리스트, 스택 , 큐, 트리 등 자료구조를 설명한다. 두번째 파트는 5장부터 10장까지 정렬, 탐색, 우선순위 큐와 힙, 해시테이블그래프, 문자열 탐색 등 알고리즘에 대한 내용이다. 세번째 파트는 11장부터 15장까지 알고리즘 설계 기법 내용을 포함한다.

C언어로 나오는 책이나 C언어에 대한 내용을 담고 있는 책이 그닥 많지 않은 요즘이다. C언어로 나온 자료구조, 알고리즘 책이라 C언어로 처음 프로그래밍을 시작한 사람들 혹은 C언어를 주로 사용하는 사람들에게 반가운 책일 것이다.

마찬가지로 다른 프로그래밍 언어를 사용하는 사람들이 가지고 있어도 좋은 책이다.

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

세상이 많이 변하고, IT는 그 세상의 속도 보다 항상 몇 발자국 더 빨리 가지만, 그래도 개발을 한다면 변하지 않는 것이 있습니다. 

바로 자료구조와 알고리즘 그리고 프로그래밍 언어인데, 개발을 시작하는 모든 사람들이 최신 개발 언어의 튜토리얼 부터 시작할 수도 있지만, 깊이 있는 개발자가 되기 위해서는, 결국 자료구조와 알고리즘을 공부해야 한다고 생각합니다. 물론 파이썬을 한다면 튜플, 리스트, 딕셔너리 같은 자료형이 더 익숙하겠지만, 기본 자료구조인 리스트, 스택, 큐에 대한 이해는 더 중요하다고 생각합니다. 

그래서 자료구조와 알고리즘에 대한 책은 상당히 많은데, 이번에 리뷰할 책은 한빛미디어에서 2022년 8월에 출간한 '이것이 자료구조+알고리즘이다 with C 언어' 입니다. 사실 C언어는 이제는 대중적인 언어가 아니게 되었지만, 기본이 튼튼하기 위해서는 꼭 배워야 하는 언어라고 생각합니다. 

 

C언어를 배울 때 '포인터' 전과 후로 러닝커브가 급격히 달라지는데, 그럼에도 불구하고 C언어가 중요한 이유는 자료구조와 알고리즘을 '직관적으로' 배울 수 있는 최적의 언어이기 때문입니다.

이 책의 좋은 점은 상세한 설명과 깔끔한 그림으로 이해를 돕는다는 점입니다. 더욱이 다양한 예제로 초보자 혹은 학부때 이미 자료구조 수업을 들었던 분들도 다시 탄탄하게 지식을 다지기에 좋습니다. 

 

 

리스트 뒤에 나오는 스택에서도 노드 삽입 연산과, 노드 제거 연산, 그리고 그 스택을 응용하여 사칙연산 계산기도 만들어 보면서 자료구조에 대한 내용을 다방면에서 알기 쉽게 설명해줍니다.

 

파트 2에서는 알고리즘에 대한 설명이 나옵니다. 

사실 알고리즘이라고 하면 정렬 알고리즘에 제일 먼저 떠오르고, 이 역시 C언어를 배울 때 가장 먼저 배우는 개념중에 하나입니다. 파이썬에 익숙하다면 단순히 .sort() 라는 명령어로 해결 될 일을 어째서 더블for문을 쓰면서 해야 하는지 의문이 들 수도 있지만, 내부 구조를 알고 쓰는 것과, 모르고 쓰는 것은 나중에 단순정렬이 아닌 특수한 조건에 맞춰서 정렬할 때 그 효과를 톡톡히 누리게 됩니다. 

그리고 개인적으로 이 책의 묘미는 챕터11인 알고리즘 성능 분석과 12장인 분할정복 이라고 생각합니다. '알고리즘 성능 측정 기준' 부터 시작하여 알고리즘 수행시간 분석을 위하여 접근표기법도 설명해 줍니다. 

우리가 기껏 알고리즘을 개발했더 하더라도 그 알고리즘의 우수성을 표현하지 않는다면, 그건 아무도 쓰지 않는 알고리즘이 되고 말 것입니다. 

 

책의 전체 장수는 644장입니다. 그 만큼 방대하고도 다양한 내용을 담고 있습니다. 그리고 술술 넘겨보면서 읽을 수 있는 책은 아닙니다. 하지만 어렵게 공부한 만큼, 그 후에 데이터 엔지니어로 가던가, 데브옵스로 가거나, 풀스택 개발자가 되는 등 어디로 진로를 정하더라도 풍성한 뿌리로 내릴 수 있는 양분이 되리라 생각합니다. 

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

약간 아쉬운 것은 C언어 기반이라는 것이다. 어쩌면 장점일 수도 있다. 요즘은 파이썬으로 프로그래밍 언어에 입문을 많이 하는 추세인 것 같지만 그 이전엔 C언어가 그 자리를 대신하고 있었다.

C언어에서 포인트 등이 어려울 수 있지만 CS 관점에서는 배워두는 것이 좋다고 생각하기 때문에 C언어라는게 장점일 수도 있다는 생각이 들었다.

 

222.jpg

 

 

자료구조는 언어마다 조금씩 다를 수 있지만 기본적인 개념은 거의 비슷하다. 알고리즘는 더더욱 같다고 보면 될 것 같다. 그렇기에 언어is뭔들, 자료구조와 알고리즘에 대해 제대로 학습하면 언어는 그냥 거들 뿐이다.

물론 본인이 아는 언어로 하면 좋겠지만 언어 그 자체보다는 얼마나 잘 이해하기 쉽게 씌여진 책인가를 기준으로 선택하고 개념만 보고 자신만의 언어로 작성 혹은 포팅해보는 것도 좋은 방법이다. 이 책을 통해서 그런 관점의 학습을 진행해보는 것은 어떨까 싶다!

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

this.jpg

 

 

소프트웨어 개발자로 살아가기 위해서는 코딩테스트는 필수불가결이 되어 버렸다. 신입, 경력 상관없이 많은 회사에서

면접 전에 코딩테스트를 진행하고 있기 때문이다. 그럼 코딩테스트를 위해서는 무엇을 준비해야될까? 아니 개발자로서 

코딩테스트는 어떤 자격을 가진 사람을 원하는지 생각해보아야 한다.

 

수많은 라이브러리들이 개발을 편리하게 제공을 해주고 있지만, 그 근간에는 자료구조와 알고리즘이 있다. 우리가 라이브러리의

기능만 알고 쓸수도 있지만, 제대로 사용하기 위해서는 자료구조와 알고리즘의 기본 지식이 있으면 개발하는데 있어 많은 도움이

되기 때문에 필요로 하지 않나 싶긴하다. 

 

근데 그 첫번째 관문이 코딩테스트이니 개발자로서 기본을 테스트하는 시험이라고 볼 수도 있을 것 같다. 

수 많은 책들이 나왔지만, 책 내용은 크게 다르지 않다. 리스트, 선형, 큐, 트리의 기본 자료구조를 익힌 다음에 이 자료구조를

응용한 알고리즘을 배우게 되어 있다. 

 

정렬, 탐색, 우선순위 큐, 해시 테이블, 그래프, 문자열 탐색과 알고리즘 성능 분석하는 방법까지 다 다루고 있다. 알고리즘 성능

분석 하는 부분이 젤 맘에 들었는데, 알고리즘 문제에서 기본 정답을 맞추더라도 백그라운드 문제에서 시간초과되는 아픔을 

겪어보면 성능 분석이 얼마나 중요한지 다시금 느낄 수 있기 때문이다. 

 

책에서는 자료구조와 알고리즘을 이해하기 쉽게 그림과 같이 설명을 해주는데, 단계별로 하나하나 자세하게 되어 있어 

다른 책에서 이해하지 못했던 부분도 쉽게 설명이 되있어 어렵지 않게 이해할 수 있었다. 

 

특히, 최근에는 자바나 파이썬으로 알고리즘 책이 많이 출간이 되었는데, C언어를 하는 사람들에게는 반가운 책이지 않을까 

싶다. 물론 언어는 크게 상관이 없다지만, 가장 신경쓰이는게 가장 잘 쓰는 언어로 된 책이 좀 더 예제가 더 와닿기 때문이 

아닐까 싶다. 

 

개인적으로는 이 책의 자료구조와 알고리즘을 공부하면 프로그래머스나 백준에서 조금만 응용력을 공부하면 2-3달내지에는

회사 코딩테스트를 통과하는데 큰 어려움이 없을 것 같다. 

 

예제 뿐만 아니더라도 설명이 쉽게 되어 있어 자료구조나 알고리즘을 어려워 했던 분이라면 한 번 읽어보길 추천하는 책이다. 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

한빛미디어 <나는리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.발자라면 자료구조와 알고리즘을 충분히 이해하고 있어야 한다.

태스크 해결 능력을 길러주며 회사 개발자로 입사하기 위해선 코딩테스트는 필수이기 때문이다.

물론, 자료구조와 알고리즘은 지루할 수 있기 때문에 쉽고 재밌게 설명해주는 그런 책이 필요하다.

지루한 내용인데도 나는 이 책의 중후반까지 읽었다.

이 책은 자료구조와 알고리즘을 설명해준다.

개념들은 모두 자세하게 설명해주기 때문에 기억이 나지 않더라도 괜찮다.

그리고 조금의 수학적 지식도 알고 있으면 이 책은 많은 도움이 되어 줄 것이다.

1~2년 전 자료구조와 알고리즘을 공부했던 기억이 난다.

리스트, 스택, 큐를 공부했었고 알고리즘에서는 버블 정렬, 병합 정렬, 퀵 정렬 등을 다루었다.

해당 책에서도 이런 개념들도 포함되어 있는데 가장 높게 사는 건 '간명성'이다.

얼마나 간단명료하냐면 전공자는 그림만 보아도 어떤 구조인지, 정렬인지 바로 알 수 있다.

비전공자의 경우도, 개념을 읽고 그림과 함께 본다면 충분히 이해할 수 있다.

또한 개념만 정리된 것이 아니라, 알고리즘 설계 기법과 평가 방법까지 공부할 수 있다.

그리고 챕터 당 충분한 예제파일과 연습문제를 제공해주고 있어 복습할 때 많은 도움이 된다.

 

만약, 이 책을 읽었는데 이해가 어렵다면 파이썬 언어이기는 하지만 '모두의 파이썬 알고리즘'을 읽어보고 이 책으로 넘어오면 된다.

단, C언어를 처음 접하는 사람이라면 이 책은 어려울 수 있다. 내용이 어렵다는 것이 아니라, 코드들을 이해하는 데 시간을 많이 소요할 수 있다는 것이다. 그러니 C언어를 사용한 경험이 있는 사람이 이 책을 활용하기 적절하다.

C언어를 매우 얕게 공부한 나는 이해는 할 수 있었고 이 코드들을 파이썬 코드로 구현하고 있다.

이 책을 읽어볼까 하는 사람에게 적극적으로 추천한다.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

요즘 채용시장에 필수적으로 코딩테스트가 많이 채택되는 회사가 많아지는 곳이 보이고 있다. 코딩테스트에서 자료구조를 활용을 하면 코딩테스트 또한 수월한데, 자료구조가 어렵게 느껴지지만 이 책을 읽고 나면 자료구조 별거 없구나 하고 느낄 것이다. 다른 자료구조책보단 훨씬 얇긴 하지만, 내용 측면에서는 간결하고 필요한 부분만 있어서 더 쉽게 느껴졌고 재미있게 읽을 수 있었다.

'좋은 프로그래머가 되려면 눈앞의 문제에 적절한 자료구조와 알고리즘을 적용할 수 있어야 한다. 라는 지은이의 말에 처음으로 나오는 문장이 굉장히 인상깊게 느껴졌다.

어떤 프로그래머이든지 눈앞에 마주치는 문제들을 어떻게 풀어야 할지가 굉장히 큰 이슈인데, 자료구조를 도입해보면 굉장히 쉽고 빠르게 구현되는 경우가 많고 특히 컴퓨터는 자료구조를 잘 지킨다면 유지 보수도 쉬울 것이다. 좋은 프로그래머가 되기를 원한다면 천천히 읽어보길 권해드립니다.

C#이나 자바, 파이썬 같은 현대적 언어를 사용해본 독자는 이 언어들이 표에서 소개한 것보다 더 많은 자료구조 라이브러리를 제공한다는 것을 알고 있을 것입니다. 대개는 이렇게 제공되는 자료구조를 적절히 활용하기만 해도 소프트웨어 개발을 잘 해낼 수 있습니다.

 

"그렇다면 자료구조를 왜 공부해야 하나요?"

 

이것이 자료구조+알고리즘이다 with C언어, p.5

 

 

자료구조나 알고리즘을 공부하다보면 이런 질문이 들고는 합니다. 좋은 라이브러리들을 잘 찾아서 효과적으로 사용하는 방법을 공부하는 것이 더 효율적이지 않을까? 남들이 이미 잘 만들어 놓은 라이브러리들을 놔두고 왜 자료구조와 알고리즘을 공부해야 할까?

 

 

책 소개: 이것이 자료구조+알고리즘이다 with C언어

 

이 책은 기본적으로 C 언어에 친숙한 독자들을 대상으로 집필되었습니다. C언어에 대해 아주 살짝 다루기는 하는데 문법 전반을 소개하는 것은 아니고 포인터, 구조체, 메모리 레이아웃, 스택에서 데이터를 다루는 방법, 힙에서 데이터를 다루는 방법 들만 아주 살짝 복습하고 지나갑니다. 따라서 C언어를 어느 정도 익힌 분들이 보시는 것이 좋습니다. 물론 요즘엔 파이썬, 자바 등을 이용한 알고리즘 책들도 많이 나오지만 아무래도 C언어를 활용하면 포인터를 이용하여 메모리를 직접 다룰 수 있다는 것이 큰 장점이지 않은가 싶습니다.

 

 

이것이자료구조알고리즘이다1.jpg

 

 

이 책은 크게 세 파트로 나누어져 있습니다.

Part I. 자료구조

Part II. 알고리즘

Part III. 알고리즘 설계 기법

 

Part I. 자료구조 편에서는 리스트, 스택, 큐와 트리에 대한 내용이 담겨있습니다. Part II. 알고리즘 편에서는 여러 가지 정렬, 탐색 알고리즘, 우선순위 큐와 힙, 해시테이블, 그래프, 문자열 탐색에 대하여 담겨있습니다. 마지막 Part III. 알고리즘 설계 기법 편에서는 알고리즘 성능 분석, 분할 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹 등 보다 고급 알고리즘 내용들이 알차게 담겨 있습니다.

 

자료구조나 알고리즘을 처음 공부하시는 분들은 키워드만 읽어도 어렵고 복잡해보입니다. 저자님이 그런 저같은 사람을 위해 쉽고 재미있는 예시들을 들어가며 친절하게 길을 안내해주십니다.

 

이것이자료구조알고리즘이다2.jpg

 

 

또한 알고리즘의 전개 과정을 다양한 도식으로 단계별로 담아놓아 복잡한 내용들도 차근차근 읽어내려가면 충분히 이해할 수 있습니다.

 

 

이것이자료구조알고리즘이다3.jpg

 

 

오랜만에 만나는 C언어 코드. 최근에는 파이썬 코드들을 주로 보았는데 오랜만에 만나는 C언어는 반갑기도 하고 어색하기도 하네요. 

 

 

이것이자료구조알고리즘이다4.jpg

 

 

간단한 후기

 

자료구조와 알고리즘을 처음부터 제대로 배우고자 하는 사람들도 충분이 볼 수 있도록 눈높이가 잘 맞춰져 있습니다.

수식은 최소화하고 다양한 그림으로 개념들을 쉽게 이해할 수 있도록 돕습니다.

컴퓨터 앞에 꽂아놓고 필요할 때마다 꺼내보면 좋을 것 같습니다.

 

 

"그렇다면 자료구조를 왜 공부해야 하나요?"

 

라는 질문에 저자는 이렇게 대답합니다.

 

첫재, 자료구조의 내부를 이해하면 라이브러리에서 엉뚱한 자료구조를 선택하는 일을 피할 수 있습니다.

둘째, 자료구조는 알고리즘 데이터를 효율적으로 사용할 수 있게 도와주는 핵심 부품 역할을 하기 때문입니다.

...

알고리즘을 체계적으로 공부하지 않아도 프로그래밍을 할 수 있지만, 더 나은 프로그래머가 되기 위해서는 알고리즘에 대해 제대로 알아둘 필요가 있습니다.

 

이것이 자료구조+알고리즘이다 with C언어, p.5-6

 

 

자 이제 자료구조, 알고리즘의 세계로 뛰어들어볼까요?

 

 

이 서평은 한빛미디어 <나는 리뷰어다 2022> 서평단 활동으로 무상으로 도서를 제공받아 작성하였습니다. 서평단 활동과 별개로 저의 관심과 필요에 따라 책을 읽고 객관적으로 서평을 작성하려고 노력하였습니다.

 

출처: https://it4edu.tistory.com/228

 

2022년 8월에 출간된 따끈따끈한 책 <이것이 자료구조+알고리즘이다 with C 언어>를 소개합니다. 이 책의 부제는 '문제 해결 능력을 키워주는 자료구조+알고리즘 입문서'입니다. 이 책의 저자는 박상현 님으로 대표작으로 <뇌를 자극하는 알고리즘>과 <이것이 C#이다> 등을 집필하셨습니다. 특히 <뇌를 자극하는 알고리즘>은 대한민국학술원 우수학술 도서로 선정되었던 책입니다. 

이 책을 통해 약 10여 년 만에 C언어를 다시 경험하게 되었습니다. 조금씩 간접 경험했지만, 이렇게 많은 시간을 함께하지는 않았던 것 같습니다. 이 책은 C언어를 활용하여, 자료구조와 알고리즘을 학습하는 데 도움을 줍니다. 최근 출간 도서들을 살펴보면, 자바나 파이썬을 활용한 자료구조와 알고리즘 책이 출판되고 있습니다. 하지만 C언어로 학습하는 자료구조와 알고리즘은 또 다른 매력이 있음을 다시 한번 경험하게 되었습니다. 

<이것이 자료구조+알고리즘이다 with C 언어>는 약 660페이지로 구성되어 있어 휴대하면서 읽기에 다소 부담스럽습니다. 한빛미디어 책은 대부분 전자책으로도 출간되어 있으므로, 전자책 뷰어가 있으시다면 전자책으로 만나보는 것도 좋을 것 같습니다. 하지만 개인적인 의견으로 이 책은 일반 책으로 읽는 것이 좋을 것 같습니다. 실제 책을 보는 것보다 A4와 연필로 이해하는 경우가 더 많을 것이기 때문입니다.

한빛미디어 평가단에 참가하여 작성한 글이며, 한빛미디어에서 제공해준 책을 읽고 작성했음을 밝힙니다. 

 

이 책의 매력은?

<이것이 자료구조+알고리즘이다 with C 언어>는 3부 16장으로 구성되어 있습니다. 특이한 점은 00 챕터로 시작하는 부분인데, 이 챕터는 자료구조와 알고리즘의 간단한 소개와 1부는 C언어로 메모리를 다루는 법(예: 포인터 등)을 요약해서 설명합니다. 필자는 메모리를 직접 다룰 수 있는 부분이 C언어로 자료구조와 알고리즘을 학습하는 데 매력적인 부분이라 생각하므로 이 부분을 처음에 설명한 부분은 매우 만족스러웠습니다.

1부에서는 자료구조를 다룹니다. 리스트(링크드 리스트, 더블 링크드 리스트, 환영 링크드 리스트)를 시작으로 스택, 큐, 트리 총 4개의 장으로 구성되어 있습니다. 일반적인 자료구조 책에서 다루는 내용을 대부분 다루고 있습니다. 2부에서는 알고리즘을 다룹니다. 정렬(버블, 삽입, 퀵), 탐색(순차, 바이너리, 레드-블랙 트리), 큐, 힙, 해시 테이블, 그래프, 문자열 탐색 알고리즘 등을 설명합니다. 마지막 3부에서는 알고리즘 설계 기법을 설명하고, 알고리즘 성능 기법, 분할 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹 등을 다루고 있습니다. 

1부와 2부에서 자료구조와 알고리즘의 기초에 대해 다루고, 3부에서 앞에서 배운 자료구조와 알고리즘을 활용하여 알고리즘을 어떻게 설계해야 공간/시간 복잡도를 고려하며 프로그램을 작성할 수 있는지에 대한 이해도를 높일 수 있습니다.

이 책은 자료구조와 알고리즘에 관한 입문서로 모든 자료구조와 알고리즘을 다루고 있지는 않습니다. 하지만 이 책에서 배운 지식을 체계적으로 내재화할 수 있다면, 여기서 다루지 않은 자료구조와 알고리즘도 이해하는 데 큰 어려움은 없을 것으로 생각합니다.

컴퓨터와 친하지 않고 프로그래밍이 아직 어색한 독자라면 이 책이 어렵게 느껴질 수 있습니다. 하지만 이 책에서 다루는 내용을 이해할 수 있다면, 컴퓨터 프로그래밍을 하기 위한 큰 문턱을 하나 넘은 것입니다. 한 번 도전해 보세요. 프로그래밍이 더 재미있게 다가올 것입니다.  

 

마치면서

<이것이 자료구조+알고리즘이다 with C 언어>는 프로그래밍 입문자가 프로그래밍의 매력에 빠질 수 있게 도와주는 책입니다. 다만, 시간과 노력을 투자해야 한다는 전제가 깔려 있습니다. 이 책을 처음부터 끝까지 정독하며 관련 내용을 이해하고, 연습문제를 풀이한다면 프로그래밍의 매력에 빠질 것임을 의심하지 않습니다.

운동을 할 때도 기본 체력 운동이 제일 어렵습니다. 재미도 없고, 힘들기도 배로 힘들죠. 하지만 그 어려움을 이겨낼 때 좋은 운동선수로 성장할 수 있습니다. 자료구조와 알고리즘도 비슷합니다. 이 어려움을 잘 극복한다면 프로그래밍이 재미있고 더 빨리 성장할 수 있을 것입니다.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

한빛미디어에서 출간한 이것이 자료구조 알고리즘이다 라는 책은 독자가 마지막 페이지까지 읽는 것을 목표로 기초부터 이해하기 쉽도록 집필해놓은 책이다. 수식은 최소화 하고 한 눈에 들어오는 그림을 많이 넣었다는 글귀는 혹하게 만든다. 개발자들에게 자료구조와 알고리즘이 필수라는 것은 실무를 하면서 매번 느끼고, 간헐적으로 계속 공부를 하게되느 분야인 듯 하다. 먼저, 자료구조란 데이터 보관 방법과 데이터에 관한 연산의 총체를 뜻한다. 흔히들 아는 단순 자료구조로는 int, long, double 등이 있으며, 복합적인 자료구조로는 선형, 비선형 방식에 따라 나뉘어 선형 자료 구조는 배열, 링크드리스터, 스택, 큐, 힙이 있고, 비선형 자료 구조로는 트리 및 그래프가 있다. 자료구조를 공부해야하는 이유는 자료구조 내부를 이해하게 되면 라이브러리에서 엉뚱한 자료구조를 선택하는 일을 피할 수 있고, 동일한 일련의 연산을 사용하더라도 자료구조에 따라 애플리케이션 성능이 크게 달라질 수 있기 때문이다. 또한 자료구조는 알고리즘이 데이터를 효율적으로 사용할 수 있게 도와주는 핵심 부품 역할을 한다. 즉, 자료구조를 모르게 되면 알고리즘을 공부하는데 큰 어려움을 겪을 수 있다. 더 나아가 알고리즘 개념은 어떤 문제를 풀기 위한 단계적 절차를 뜻한다. 이러한 알고리즘을 구현하는데 있어서 자료구조는 필수이고, 또 문제를 효율적으로 풀기위해 최적의 알고리즘을 찾고 개발하는 것이 중요하다고 할 수 있다.
1장에서는 리스트 개념을 배우고, 관련된 리스트들(링크드리스트, 더블 링크드 리스트, 환형 링크드 리스트)를 배우고, 2장에서는 스택 개념을 배운다. 3장에서는 입력된 순서대로 데이터를 출력하는 큐에 대해 다루며, 4장에서는 각 노드가 하나 이상의 노드와 연결되는 비선형 자료구조인 트리에 대해 다룬다. 여기서부터 약간 어려워질 수 있으나 이 책에서는 그림을 최대한 많이 사용하여 쉽게 설명하고 있으므로 내용을 이해하는데 어려움은 크게 없다. 5장에서는 정렬을 배운다. 알고리즘에 있어서 정렬은 시간복잡도에 영향을 주로 주는 요인 중 하나이다. 단순 함수를 써서 정렬 할 수도 있겠지만, 기초적인 내용을 배워놔야 응용할 수 있으며, 각 정렬 알고리즘의 성능을 비교하며 공부해놓는 것이 중요할 듯 하다. 6장에서는 탐색 알고리즘에 대해 배우게 된다. 순차탐색, 이진탐색, 이진탐색트리, 레드블랙트리 개념이 있다. 7장에서는 우선순위 큐와 힙 내용에 대해 다룬다. 3장에서 다뤘던 큐와는 달리 선입선출 방식으로 동작하지 않고, 우선 순위에 따라 데이터의 출력 순서가 결정된다. 그 다음 8장에서는 해시 테이블에 대해 다룬다. 이는 알고리즘의 메모리 공간과 관련이 있다. 9장에서는 그래프 개념에 대해 다룬다. 10장에서는 문자열 탐색에 대해 다루는데 문자열 안에 존재하는 특정 단어를 빠르게 찾아내는 것이 목적이다. 처음부터 문자열을 쭉 읽어 문자를 탐색할 수도 있겠지만, 그럴 경우 시간이 너무 오래 걸려서 time out 이 발생할 수 있다. 이러한 문제를 해결하기 위한 방법으로 이 책에서는 가장 뛰어난 성능을 가졌다고 검증된 몇 가지만 선별해서 설명하고 있다.
 
11장 부터 15장 까지는 분할 정복, 동적 계획벅, 탐욕 알고리즘, 백트래킹 등의 알고리즘 설계 기법에 대해 다룬다. 끝판왕 느낌이다. 이를 알아두면 프로그램에 맞지 않는 알고리즘을 재설계하는 시간을 아껴 더 좋은 프로그램을 만드는 일에 집중할 수 있으며, 릿코드나 백준 프로그래밍에서 어려운 알고리즘 문제를 푸는데 가장 기초가 되는 개념이다. 문제를 어떤 알고리즘으로 접근하냐에 따라 시간복잡도, 공간복잡도가 크게 달라질 수 있으므로 이를 잘 설계하는 것이 중요하다. 
 
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

C언어를 가르치고 있는데, 2학기에는 좀 더 다양한 예제를 활용해 보고자 해서 이 책을 선택했다. 기초적인 내용들을 배우고 포인터를 본격적으로 활용하고자 할 때 리스트, 스택, 큐와 같은 자료구조를 구현해보지 않을 수는 없으므로. 그리고 간단한 정렬과 탐색도 연습한다. 물론 자료구조, 알고리즘 과목이 따로 있다. 하지만 처음 C언어를 배우면서도 이런 예제 위주로 연습을 하다 보면 나중에 해당 과목을 수강할 때 도움이 많이 되리라 생각한다. 대부분의 독자들은 아마 자료구조와 알고리즘 두 마리 토끼를 잡기 위해 이 책을 선택하겠지만, 나의 경우에는 C언어의 입장에서 이 책을 살펴보았다.

 

보통 책이 Chapter 1부터 시작하는데 이 책에는 Chapter 0이 있다. <알아두면 쓸 데 있는 자료구조와 알고리즘>이라는 제목으 0챕터에서는 자료구조와 알고리즘의 정이, 그리고 C 언어로 메모리를 다루는 방법에 대해서 설명을 하고 있다. 오리엔테이션의 느낌으로. C언어 문법에 익숙하지 않은 사람도 가볍게 구조체와 포인터, 메모리할당과 해제에 대해 연습해 볼 수 있다.

 

1장부터 4장까지는 자료구조 파트로 리스트, 스택, 큐, 트리 구조를 다루고 있고, 5장부터 10장까지는 각종 정렬 알고리즘, 탐색 알고리즘, 우선순위 큐와 힙, 해시 테이블, 그래프 그리고 문자열 탐색에 대해 다룬다. 마지막 파트인 11장 부터 15장까지에서는 알고리즘 설계 기법들을 설명하고 있는데, 알고리즘의 성능 분석, 분할 정복, 동적계획법, 탐욕 알고리즘, 백트레킹을 소개하고 있다.

 

나는 특히 연습문제로 어떤 것들이 주어졌는지에 관심이 많은데, 개념을 설명하면서도 예제 코드를 제시하고 있지만, 이렇게 연습문제를 통해서 개념을 더 다질 수 있다. 개념을 잘 이해하고 있는지 묻는 문제와 주어진 코드를 수정/개선하는 문제들로 이루어져 있다.

 

레드 블랙 트리에 삼촌 노드, 할아버지 노드라는 표현을 사용한 것도 재밌지만^^ 노드 삽입/삭제도 코드로 구현해 볼 수 있게 설명이 자세히 되어 있다. 레드블랙 특성에 대해서만 설명하고 넘어가는 책도 많이 보았는데.

 

동적계획법 장에서는 분할정복 기법이나 재귀를 이용하는 것과는 어떻게 다른지를 비교해서 설명하고 있다. 단지 이미 구해놓은 값을 활용한다는 말에만 집중해서 "재귀가 동적계획법과 같은 것 아닌가요?" 하는 학생들도 많이 있는데 코드로 차이를 설명해 준다.

 

이 책은 C언어 기초문법을 배운 후 좀 더 연습해 보고 싶은 학생, 자료구조와 알고리즘을 본격적으로 배우려고 하는 학생에게 추천한다. 한 권의 책에 자료구조와 알고리즘을 모두 담고 있기 때문에 이 한 권으로는 만족하지 못할 수도 있다. 하지만 시작하는 책으로는 참 좋을 것 같다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.



큐, 트리, 정렬부터 탐색, 큐, 해시테이블, 분할 정복, DP, 탐욕 알고리즘, 백트레킹까지 상세하게 설명해준다.

코딩을 놓은지 좀 돼서, 전공자지만 찬찬히 앞부터 다시 내용을 훑고싶어 이 책을 선택했는데 너무 잘 선택한 것 같다. 사실 코딩테스트 같은걸 보면, 이 책 이상으로는 잘 안나온다.

 

여기 내용만 충분히 익혀도, 기본기가 탄탄해 질 것 같다.

 

비전공자 IT직렬 친구 이야기를 들어보면, 기본기가 부족해서 걱정이란 말을 많이하는데 전공자로서 이책을 봤을 때 책 내용이 굉장히 상세하게 적혀있으면서도 필요한 내용이 모두 들어가 있기 때문에 기본기를 익히는데도 적합할 것 같다.





높은 탑을 쌓아올리기 위해서는 기본이 탄탄해야한다.

 

기본이 약하다고 생각하는 비전공자, 전공자 모두에게 이책을 추천한다.

나또한 인생사 어떻게 될지모르고 공부한지 좀 되었기에 이책을 통해 자료구조와 알고리즘을 다시 복습할 생각이다다. :)

 

이책은 한빛미디어로부터 제공받아 작성된 후기로, 솔직한 후기만을 작성했습니다!



 

 

이것이 자료구조+알고리즘이다 with C 언어

복잡한 수식은 최소화하고 이해에 꼭 필요한 수식만 담고 작동 원리를 단번에 이해할 수 있게 도와주는 다양한 그림과 바로 실행하고 확인할 수 있는 108개 소스 코드를 예제로 제공해 알고리즘

www.hanbit.co.kr


    오랜만에 C언어로된 교재를 받았다. 입문서로 분류되긴 하지만 자료구조와 알고리즘은 언제나 복습해야하는 중요한 요소로 생각되는 바, 기본적인 공부도 할겸 자세히 읽어보고 있다. 운이 좋은 것인지, 이번 회사에서는 주로 C, C++ 로 작업을 하고 있다보니 코드를 조금 더 깔끔하게 작성하는데 직간접적으로 도움을 받는 중이다.



    내가 좋아하는 보라색(!)으로 깔끔하게 만들어진 책이다. 이것이...이다 시리즈의 책을 벌써 5~6권째 보고 있는데, 다른 책도 물론 좋았지만, 아무래도 가장 업무와 연관이 있는 C언어로 작성된 기본서라 조금 더 정이 간다.



     가장 마음에 들었던 점은 자료구조와 알고리즘이 같이 잘 녹아있는 책이라는 점이다. 물론 시중에도 함께 작성된 책은 많은데, Greedy 알고리즘이나 Dynamic 알고리즘을 직접적으로 언급하면서 내용이 많이 할당된 책은 많지 않다. 그리고 자료구조를 배움과 동시에 바로 이어서 알고리즘을 익힐 수 있으니 교육을 하는, 받는 입장에서도 굉장히 유용한 책일 것 같다. 수업 교재로 쓰면 딱 좋겠다는 생각이 든다.



    책은 꽤 두꺼운데, 그런 만큼 그림과 코드가 꼼꼼하게 잘 설명되어 있다. 한번 공부해본 사람들이나 복습의 목적을 가진 사람들은 굳이 따라 쳐보거나 하지 않아도 눈으로 따라 읽어볼 수 있을 정도로 자세하게 되어 있으니 부담없이 볼 수 있다.  처음 공부하는 사람들은 방대한 양에 겁을 먹을 수도 있지만 이 책 한권으로도 꽤 많은 코드를 작성해볼 수 있으니 많은 경험을 하게 될 것이다.



    각 단원에는 어떤 알고리즘들을 배우게 될 것인지 순서도 설명하고 있으며 그 알고리즘이 어떻게 구성되고 개발되어 있느지를 하나씩 배우게 된다. 실제 대학의 알고리즘 수업도 이 과정과 비슷한데, 공부하다보면 알고리즘이 어떻게 발전되어 왔는지, 이전 알고리즘보다 어떤 점이 더 좋고 안좋은지, 지금은 어떤 알고리즘을 채택해서 쓰고 있는지 등도 알게 된다. 물론 하나씩 직접 구현해본다는 것이 가장 좋은 점이다.



    앞에서도 말했듯이 동적(Dynamic) 계획법과 같은 내용을 직접적으로, 자세하게 언급되있따. 이 책의 알고리즘은 진짜 학부과정에서 배우는 컴퓨터 알고리즘 과목을 말하는 것 같다. 학부생이나 입문자 기준에서는 이 책을 보고 나서 코딩 테스트 책들이나 다른 여러가지 알고리즘들을 설명한 책들도 함께 보면 많은 도움이 될 것 같다. 



끝.

 


"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

이것이 자료구조+알고리즘이다 with C 언어도서를 소개합니다.

 

 

hanbit-algo-01.png

 

 

소프트웨어 업종에서 이직을 위한 코딩 테스트를 피할 수 없는 부분이다. 코딩테스트는좋은 소프트웨어 개발자를 고용하고자 하는 기업의 선별 기준된 것은 분명하고, 지인에게 듣기에도 꽤 유명한 IT 회사 이직에서 좋은 경력을 가졌음에도 코딩 테스트 벽에 부딪혀 탈락의 고배를 마신 이들이 꽤 된다고 들어서중요도가 매우 높아졌다. 굳이 이직을 거론하지 않아도, 생산성에대한 고찰과 리뷰 문화 확대로 자료구조와 알고리즘의 중요성은 중요해지지 않았던가.... 어쩃든 자료구조와알고리즘은 개발자의 실력을 비교하는 기준이 된 것은 사실로 보입니다.

 

기대했던 내용

#####################################

"이것이 자료구조+알고리즘이다 with C 언어을 리뷰하기 직전에 도서에서 기대한 내용들이 있었습니다. 자료 구조와 알고리즘에 대한 기본에 충실한지, 이론을 실습할 수있는 문제는 풍부한지, 알로리즘 최적화에 대한 내용도 풍부했으면 했고,자료구조와 알고리즘을 설명을 얼마나 쉽게 전달할 수 있는지에 대한 부분이었죠.

 

목차를 살펴보면 기대에 부합되는 내용들이 포함되어 있는 것을 알 수 있었습니다.이 책은 총 14장으로 구성되어 있고,

ü  Chapter 01 리스트

ü  Chapter 02 스택

ü  Chapter 03

ü  Chapter 04 트리

ü  Chapter 05 정렬

ü  Chapter 06 탐색

ü  Chapter 07 우선순위 큐와 힙

ü  Chapter 08 해시 테이블

ü  Chapter 09 그래프

ü  Chapter 10 문자열 탐색

ü  Chapter 11 알고리즘 성능 분석

ü  Chapter 12 분할 정복

ü  Chapter 13 동적 계획법

ü  Chapter 14 탐욕 알고리즘

hanbit-algo-02.png

 

 

 

리스트, 스택, , 트리의 4가지 자료구조 파트와 정렬, 탐색, 우선순위 큐와 힙, 해시테이블, 그래프의 6가지 알고리즘, 그리고 마지막으로 “Chapter 11 알고리즘 성능 분석부터는 파트-3에 해당하는 알고리즘 성능 분석법과 4가지 설계 기법에 대해서 설명하고 있습니다.

 

hanbit-algo-03.png

 

매 챕터 시작에서는 이 장에서 배워야 하는 내용을 소개하고, 어떤flow로 전개할지를 보여줍니다. 자료구조나 알고리즘을 어느정도 아는 이들도 후반기 내용을 가면서 다시 심화 내용으로 이어지기 때문에 이런 내용 전개는 중요하다고 생각됩니다.

 

자료구조와 알고리즘 이론에 대한 탄탄한 이론과 함께 풍부한 그림 사용은 독작의 이해도를 높여줍니다. 단순하게 도식화된 이미지들이 굉장히 많이 삽입되어 있습니다. 또한탄탄한 이론 설명에 이어 이를 실습할 수 있도록 예제 프로그램을 함께 작성하여 설명을 진행하고,

 

hanbit-algo-04.png

 

 

마지막으로 연습문제로 학습한 내용을 되새김하는 것 또한 좋았습니다.

 

hanbit-algo-05.png

 

 

 

 

장단점

#####################################

기본 이론에 충실

풍부한 그림 삽화를 통한 이해도 증대

예제와 연습문제로 기억의 암각화

 

 

탄탄한 이론 설명과 실습 제공 위주로 내용이 구성되어 있다는 점이 이 책의 가장 큰 장점이라고 생각합니다. 모든 이론 도서의 특성상 다소 지루해질 수 있으나, 인내를 가지고따라해보기과정이 반드시 필요합니다. 파트 1, 2를 통해 주요 자료구조와 알고리즘을 이해하고, 마지막 파트 3를 통해 알고리즘 최적화를 포함한 심화 내용으로 이어집니다.

 

hanbit-algo-06.png

 

 

 

마무리

#####################################

사실 자료구조와 알고리즘 도서는 오랫동안 꽤 출간되었습니다. 그럼에도 불구하고 도서의 심화내용까지숙지하고 있는 이들은 상대적으로 비율이 적죠. 자료구조와 알고리즘에 대한 탄탄한 이해도와 실제 활용에대해서 체계적으로 정리된 한 권의 도서라고 말씀드리고 싶습니다.

 

hanbit-algo-07.png

 

한 권쯤은 책장에 구비해두고 필요할때마다 레퍼런스해서 보기 좋은, 또한 인내를 가지고 읽고실습을 통해 내용을 숙지한다면 분명한 가치를 가지는 도서여서 구매력이 충분한 도서라고 말씀 드리고 싶고 보다 나은 개발자로 레벨-업 될 것으로 사료됩니다.

 

"한빛미디어 출판사의 리뷰 활동을 위해서 책을 제공받아 작성된서평입니다."


 

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

책을 제공받았지만 싫으면 싫다. 별로면 별로다. 좋으면 좋다! 라고 솔직하게 리뷰하겠습니다.


 

책 소개 :

자료구조는 코드를 작성할 때 정말 중요한 부분인것을 인지하고 있지만, 일을 하다보면 내가 조금 더 익숙한 알고리즘을 사용하게 되면서 그 상황에 맞는 알고리즘을 적용하는 부분이 아직은 어렵다.

그렇기 때문에 이 책은 그런 나에게 다시한번 자료구조에 대해 복습하는 계기가 되었다.

C언어로 설명이 되어있기는 하지만 보통 프로그래밍 입문을 C로 하기도 하고 많이 어려운 언어는 아니기때문에 이해하는데 큰 어려움은 없다고 생각된다.

학교에서 전공수업도 거의 한빛미디어에서 나온 책들이 전공책이었고 이번 한빛미디어 책 리뷰를 하게되면서 여러 책들을 보고있는데 그러면서 항상 생각되는 부분은 IT책 출판사중에서는 한빛미디어가 제일 초심자가 다가가기 쉽게 풀어서 책을 잘 만드는듯 하다. 깔끔한 구조 적절한 이미지와 쉽게 풀이되는 예시 코드까지. 자료구조는 정말 중요한 부분이라고 생각되기때문에 꼭 읽어봤으면 좋겠다. 

 

 

 

 

 

 

 

 

 

장점 :  초보자가 보기에도 어렵지않게 중간중간 개념에 대해 집어주는 부분도 있다. 예를 들면 포인터부분을 잠깐 잊고있었는데 그 부분을 이 책을 읽으면서 다시 배우게 되었다. 아무리 이론적으로 풀어 설명한다고 해도 막상 코드에 어떻게 적용을 하는가 이 부분이 입문자에게는 가장 큰 난제라고 생각했는데 이런 부분도 예시 코드로 주석과 함께 친절하게 설명되어있다. 이번 책은 단점이 없는 내 마음에 쏙 드는 책이였다.

 

단점 :  없다. 너무 좋았고 틈틈히 계속 공부할 예정이다.


 

개발자라면 꼭 필수로 공부해야 되는 자료구조, 알고리즘 책을 리뷰해보려 한다.

일단 이 책은 C언어 베이스로 적혀 있는 책이다.

전공자라면 거의 대부분 C언어를 알기 때문에 다른 언어 베이스의 책보다는 이 책을 강력 추천한다.

왜냐면 C언어로 자료구조와 알고리즘을 공부하면 다른 언어에서는 쉽게 접하기 힘든 더 딥한 부분(메모리에 관한 부분)까지 접할 수 있는 장점이 있다.

그리고 이 책은 자료구조와 알고리즘에 대한 모든 개념이 있는 것이 아닌, 핵심 개념만 소개하기 때문에 보기 좋다. 

이 책은 자료구조, 알고리즘, 알고리즘 설계 기법 총 3개의 내용으로 구성되어 있다.

자료구조는 리스트, 스택, 큐, 트리에 대해 배운다.

자료구조의 개념을 설명하며, 자료구조를 직접 구현해본다. 또한 메모리 원리를 이해하는 등 여러 방면의 지식을 얻을 수 있다.

 

알고리즘에서는 정렬, 탐색, 우선순위 큐와 힙, 해시 테이블, 그래프, 문자열 탐색에 대해 공부한다.

앞에서 배운 자료구조를 응용하여 알고리즘을 구현하여 앞의 내용을 복습할 수 있다.

또한 여러 가지 기법들이 소개되어 있어 비교하면서 보기 좋다.

 

마지막으로 알고리즘 설계 기법에서는 상황별 알고리즘 설계 기법과 성능 측정법에 대해 설명한다.

알고리즘 성능 분석, 분할 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹에 대해 자세히 나와있다.

 

이 책은 자료구조와 알고리즘을 한 번에 공부할 수 있어 좋았다.

자료구조, 알고리즘을 따로따로 공부하면 어떤 자료구조를 어디에 사용해야 될지 감을 잡기 힘들고 사용을 제대로 하기 힘들었다.

하지만 자료구조를 먼저 공부하고 그에 맞는 사용법을 알고리즘을 통해 볼 수 있어 효과적인 공부가 되었던 것 같다.

 

이 책은 자료구조와 알고리즘을 정석으로 공부하고 싶은 개발자에게 너무너무 추천한다!!

 

 

한빛미디어 서평단 활동으로 이것이 자료구조 + 알고리즘이다 를 받았다.

자료구조를 다루는 책은 오랜만에 읽어본다. 

파이썬을 자주 쓰다보니 부끄럽게도 포인터 개념에 대해서는 어렴풋이나마 알고 있지만 여전히 명확히 이해하지는 못하고 있다. 

그렇기 때문에, 자료구조와 알고리즘의 입문자와 중급자 사이에 모호하게 걸쳐져 있는 상태인데, 

책이 상당히 쉽게 읽혔다. 

 

설명들도 꼼꼼했고, 궁금할 만한 부분들에 대해서도 작성시에 고려되어 있었는지 읽는 족족 궁금증들이 잘 정리가 되었다. 

기존에 다른 자료구조 책들도 몇권 갖고 있는데, 그 책들에 비하면 두께가 얇은 편이다. 

그래서 내용이 적은 것일까? 싶었는데, 내용이 적은 편도 아니었고, 설명 자체가 장황하기보다 간결하고 필요한 부분만 작성되어 있어서 그런 것 같았다.

 

자료구조를 공부하려는 분이 있다면 강력하게 추천드리고 싶다.

 


 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

표지.jpg

 

 

C에 대한 기본 문법을 알고 봐야하는 책입니다.  자료구조를 C로 코딩하고, 설명하는 책이기에 C에 대한 기본기가 탄탄하지 않으면 보는데 고생할 책입니다. 책의 편집은 가독성 있게 아주 잘되어 있습니다. 챕터별로 스택, 리스트, 트리 등 이론을 알려줍니다. 도식화로 쉽게 설명해주고, 이를 C로 코딩해서 설명하고 있습니다. 보라색 컬러 인쇄는 독특해서 눈이 지루하지 않고 오래 봐도 괜찮은 느낌입니다. 연습문제와 퀴즈도 있고, 챕터 별로 학습 목표를 잘 정리하기에 이에 중점을 두고, 내가 해당 챕터를 다 공부하고 나서 설명할 수 있는지로 공부하면 됩니다.

 

 

주니어 개발자가 되면, 더 높은 품질의 코드를 만들기 위해서 자료구조와 알고리즘에 대한 고민을 하게 됩니다. C언어로 자료구조를 공부하면 좋은 이유는, 오픈소스를 커스텀하거나 할 때 꽤 유용하게 할 수 있기 때문입니다. 파이썬의 경우, 일부 라이브러리들이 C++로 되어있거나 한 경우들이 있습니다. 어느 로우 레벨까지 가서 커스텀하게 될지는 모르지만, 깊이 있는 개발자가 되기 위해서는 절차지향 언어인 C언어로 자료구조까지 하는건 큰 도움이 됩니다. 어려운만큼 자산이 되는 부분이 있습니다.

 

 

책_표지.png

 

 

“‘좋은프로그래머가되려면 눈앞의 문제에 적절한 자료구조와 알고리즘을 적용할 수 있어야 합니다.”

 

책의 앞부분, 지은이의 말에 처음으로 나오는 문장이다. 이 문장처럼 좋은 프로그래머란자료구조와 알고리즘에 대해 잘 알고 있어야 한다. 여기서 좋은프로그래머는 단순히 코딩을 하는 것을 의미하지 않는다. 주어진문제를 자신의 힘으로 해석하고 어떻게 해결할 수 있는 지를 연구한 후, 이를 실제로 구현하는 일련의과정을 모두 할 수 있어야 한다. 이를 위해서는 자료구조와 알고리즘에 대한 이해가 필수적이다. 자료구조와 알고리즘은 전산학 관련 학과에서는 전공 필수로 꼭 이수해야하는 과목이며, 그 외의 학과에서도 문제 해결력을 향상하기 위해 많이 선택되곤 한다. 컴퓨터가아무리 처리 능력이 빠르다고 하더라도 잘못된 자료구조나 알고리즘을 사용하면 굉장히 오랜 시간이 걸리거나, 잘못된결과 또는 아예 답을 구하지 못하는 경우도 발생하게 된다.

이것이 자료구조 + 알고리즘이다C 언어를 이용하여 자료구조와 알고리즘을 설명하고 있다. 요즘은Java, Python 등을 이용한 수업이 주로 이루어지고, 관련된책도 많이 나오고 있지만, 자료 구조와 알고리즘은 다룰 때는 C 언어만의장점이 있다. 일단 C언어는 포인터를 이용하여 메모리를 직접다룰 수 있기 때문에 보다 다양한 자료구조를 설계하고 알고리즘을 적용할 수 있다. 물론 포인터에 대한정확한 이해가 뒷받침되어야 하지만, 일단 익숙해지면 굉장히 편리하게 사용할 수 있다. 메모리를 직접 다룬다는 것은 그만큼 문제에 최적화된 방법을 설계할 수 있고,오버헤드를 줄일 수 있음을 의미한다.

이 책은 크게3 파트로 구성되어 있다. 파트 1은 자료구조에 대해 다루는 데, 자료 구조의 가장 기본이 되는 리스트, 스택, 큐와 트리에 대한 내용을 담고 있다. 파트 2는 자료 구조에 대한 이해를 바탕으로 알고리즘을 소개하고있다. 원하는 순서대로 데이터를 정리하는 정렬(Sorting), 많은데이터 중에서 원하는 데이터를 찾는 탐색(Traverse)과 함께 우선순위 큐와 힙, 해시 테이블, 그래프, 문자열탐색에 대해 다양한 알고리즘을 다루고 있다. 파트 3은 알고리즘설계 기법에 대해 알고리즘 성능 분석 방법, 분할 정복, 동적계획법, 탐욕 알고리즘, 백트래킹 순으로 설명하고 있다.

 

이 책은 13년 전 출간되어 대한민국학술원 우수학술도서로 선정된 바 있는 뇌를자극하는 알고리즘을 개정한 책이다. 많은 독자로부터 꾸준한사랑을 받아온 만큼 그 내용과 구성이 탄탄하여 대학의 교재로 사용하기에도 부족함이 없다. 좋은 프로그래머가되기를 원한다면 한번쯤 찬찬히 둘러볼 만한 책이다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

20220828_053316.jpg

 

 

책이 두꺼운 만큼 더 자세하게 C언어를 기반으로 다양한 자료구조와 알고리즘에 대해 설명하고 있습니다. 무엇보다 어렵지 않게 잘 풀어쓴 설명 + 한눈에 이해하기 쉬운 도식 + 소스코드에 대한 충분한 설명 덕에 공부하기 수월했어요. 역시 한빛미디어 '이것이 OO다' 시리즈는 그동안의 경험으로 믿고 볼 수 있기 때문에 책 두께에 대한 진입장벽만 넘으면 돼요. ㅎㅎㅎ

이것이 자료구조+알고리즘이다 with C언어 책은 자료구조와 알고리즘이 낯선 입문자들이 이 책을 볼 때 어디를 중점으로 봐야 하는지에 대해 학습 로드맵을 제공해 줘요. 이 부분을 보면서 각 챕터별로 꼭 알아두어야 할 내용 위주로 노트 정리하면 아주 좋아요.

그리고 이 책이 C언어를 가지고 소스코드를 제공하지만 자바에서도 스택,큐,리스트 등의 자료구조를 사용하고 하니 다른 언어를 주로 쓰시는 분들이라도 이 책으로 자료구조/알고리즘 공부를 충분히 할 수 있을것 같아요. 개인적으로는 C언어를 진짜 정처기 시험문제로 나오면 풀정도?로 밖에 몰라서 이 책 보면서 C언어 공부도 더 하게 되네요.

자료구조와 알고리즘에 대한 이해, 코딩 테스트 대비 등을 하시는 분들은 한번 이 책으로 공부하는 것도 좋을 것 같아 요.

** 본 리뷰는 한빛미디어 <나는 리뷰어다> 리뷰어 활동으로 도서만을 제공받아, 리뷰어의 주관적인 견해로 작성된 리뷰입니다. **

프론트엔드 직무로 현업에서 일하고 있는 내가 알고리즘과 자료구조의 필요성을 느낀 적은 많지 않다. 프론트엔드는 사용자와 상호작용하는 부분을 담당하는 파트이다. 프론트엔드는 자료구조와 알고리즘보다 사용자의 경험에 대한 고려와 요구사항 파악에 더 많은 힘을 쏟아야 한다.

 

그러나 이 점이 프론트엔드가 알고리즘, 자료구조 상식을 등한시 해야한다고 주장하는 것은 아니다. 필요성을 느낀 적이 많지는 않더래도 사용자 경험을 고려하여 어떠한 문제를 풀어야 했을 경우, 기획자가 기획한 요구사항을 어떻게 풀어내야 할 지 고민에 빠졌을 때는 자료구조와 알고리즘이 필요하겠구나 한다. 결국 프론트엔드도 어떠한 기능을 구현하고자 할때 알고리즘적 요소가 들어가기 마련이다.

 

그래서 내가 이번에 읽게 된 책은 '이것이 자료구조 + 알고리즘이다.' 이다.

 

--

 

내 집 책꽂이에는 저자의 또다른 책 '뇌를 자극하는 파이썬3' 가 꽂혀있다. 의도한 건 아니지만 저자가 집필한 책을 두 권이나 갖게 되었다! 사실 파이썬3 책은 모두 읽지 못했다. 내가 프로그래밍을 처음 시작하던 시절 의욕에 불타올라 언젠간 읽겠노라 하며 사놓은 책이기 때문이다.

 

각설하고, 본론으로 돌아와 책에 대해 말하자면 저자분의 글 실력이 파이썬3를 쓰던 실력보다 더 좋아졌다. 지금까지 알고리즘 강의나 문서를 여러개 보았는데 이 책이 제일 이해가 잘 된다. 물론 지금까지 축적해온 지식들이 있어 그런 것일 수도 있다. 확실한건 지루한 알고리즘 학문임에도 적절하게 환기시켜주는 이야기가 있어 지루하지만은 않고, 설명할 때 예시들이 컬러풀해서 눈에 더 잘 들어왔던 것 같다.

 

책은 C언어로 자료구조와 알고리즘을 구현하고 있다. 처음 링크드 리스트들을 C언어로 따라치며 구현해 보았는데, 따라치며 구현해 보니 C언어에 내가 미숙한 것도 있고 따라치며 읽다보니 시간이 너무 오래 걸려 링크드 리스트와 스택까지만 구현을 따라 하고 다른 구현체들은 눈으로 보며 이해하고자만 했다. (다른 이야기지만 C언어는 항상 볼때마다 새롭다.) 여기서 주의할 점은 저자분은 독자가 이미 C언어에 익숙한 사람이라 가정하기 때문에 이 부분 참고하길 바란다.

 

책의 목차는 간결하다.

 

1. 링크드 리스트

2. 스택

3. 큐

4. 트리

5. 정렬

6. 탐색

7. 우선순위 큐와 힙

8. 해시 테이블그래프

9. 문자열 탐색

10. 분할정복

11. 동적 계획법

12. 탐욕 알고리즘

13. 백트래킹

 

나열해 보니 꽤 많긴 한데.. 초급부터 고급 알고리즘까지 필요한 개념들만 꽉 담겼다고 본다. 그래서인지 표지처럼 '입문서'라 하였나 보다. 13가지 목차가 있으니 책은 두꺼운 편이다. 600페이지가 넘는다. 

 

이 책의 장점 중 하나는 쉬운 것 부터 알려주는 점이었다. 단점이 있는 알고리즘들을 먼저 알려주고 단점을 보완한 알고리즘을 차례로 소개해 줘서 더 뇌리에 박히게끔 도와준다. 예를들어.. 버블 정렬부터 알려주고 퀵 정렬을 알려준다. 그 이유로 좋은 알고리즘을 알기 위해서는 나쁜 알고리즘의 조건도 알아야 하기 때문이라고 하신다.

 

앞서 말했지만, 책에서는 알고리즘을 본격적으로 소개하기 전에 적절히 환기시켜주는 이야기들이 포함되어 있다. 여기서 인상 깊었던 이야기 하나만 얘기해 보자면, 허프만 이야기가 제일 인상깊었다.

 

MIT 박사과정생 중이던 허프만은 어느날 교수에게 기말 리포트를 제출하게 되었다. 그 리포트의 주제는 '가장 효율적인 이진 코드 기법을 고안하라.'였다. 허프만이 제출한 알고리즘은 그 리포트를 제출하라고 말한 교수의 알고리즘보다 더 우수한 것으로 드러났고 전 세계에서 가장 유명한 압축 알고리즘이 되었다고 한다.

 

조금 재미있지 않은가? 자신의 스승보다 더 우수한 알고리즘을 개발한 제자라니! 이런 이야기 외에도 오바마의 버블 정렬 언급도 있다.

 

어떤 것에 대해 전문가 수준의 지식을 갖게 되려면 기본적으로 책을 약 7권 읽으면 된다고 한다. 1~2권의 입문서,  2~3권의 중급서, 2권 이상의 고급서다. 나는 아직까지 알고리즘에 대한 갈증은 있으면서 책을 본격적으로 읽은 경험은 없었다. 그런 의미에서 이 책은 입문서로 정말 알맞는 책이다.

 

자료구조 + 알고리즘 개념 잡고 싶다면 추천하는 책!

 

--

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

8월의 한빛 서평 도서는 이것이 자료구조+알고리즘이다 with C 언어입니다. 서평 덕에 오랜만에 C언어 코드를 읽는 시간이어서 조금 어색하기도 했지만, 구현과 컴퓨터에서 실제로 어떻게 동작하는지 이해 하긴 좋은 선택이었습니다. ADT부터 해당 자료구조들의 기본 스펙과 기능들을 소개하고 컴퓨터 메모리 상에서 어떻게 작동하고 올렸다가 내리지 등 시스템 적 이해도 동시에 키울 수 있는 책이었습니다. C언어로 코드를 작성해서 단순히 문법을 익힌 수준으로 책의 코드가 다소 어려울 수 있습니다. 포인터를 이용해 메모리를 직접 참조해서 넘기고, 메모리를 할당하기 위해 해당 구조체의 크기를 연산해서 메모리 할당을 하고, 구조체에서 자신을 재귀적으로 참조하는 등 C 기초 이상을 이해를 하고 있어야 큰 무리 없이 읽을 수 있다고 생각이 들었습니다.

이런저런 개발자/프로그래밍 커뮤니티를 보다보면 주기적으로 돌아오는 주제 중에 ‘과연 자료구조와 알고리즘은 모든 프로그래머에게 필요한가?’입니다. 저는 이 질문에 필요하다고 답을 드리고 싶습니다. 탄탄하지 못한 알고리즘은 결국 개발의 속도를 지연 시키고 드물지 않게 퍼포먼스에도 영향을 줍니다. 공부를 막 시작하고, 과제나 작은 프로젝트를 하는 수준에서는 적절하지 못한 자료구조 선택이라는게 크게 와닿지 않을 것입니다. 데이터의 양이 작을 때는 체감이 힘들정도로 컴퓨터가 빨라져서 3중 for문을 써도 뭐가 잘 못 된지 모를 수 있습니다. 자료구조를 잘 못 선택하면 프로젝트가 커질수록 다루는 데이터가 많아 질수록 속도 저하와 예기치 못한 문제들을 만나게 될 수도 있습니다. 기능이 커지고 절차가 복잡해 질수록 알고리즘과 그 에 맞는 자료구조는 빛을 발합니다.

이 책에서 다루고 있는 자료구조와 알고리즘은 우리 선배 전산학도들께서 수많은 시행착오와 트러블 슈팅을 겪으면서 우리에게 정리 해주신 농축액라고 생각하시면 좋겠습니다. 여러분의 필요에 따라 자려구조를 개선해서 사용 할 수도 있고, 새로운 기능을 추가 할 수 있습니다. 여러분이 만나는 대부분의 상황은 여기있는 기본 자료구조만 숙지하고 있으면 충분히 해결 가능한 문제들입니다. 책의 정렬 알고리듬 파트에서 나오는 예시 처럼 제한 된 시간 내에 정렬 되어 있지 않은 30,000개의 데이터 중에 14,142 번째로 큰 데이터를 출력 해주기 위해서 어떤 자료구조로 데이터가 구성되고 정렬하고 탐색 해야 할 지 알고 연습이 되어 있어야합니다.

이 책의 유일한 단점은 스택을 자동 메모리, 힙을 자유 저장소, 데이터 영역을 정적 메모리로 기술하고 있는 부분이었습니다. 그런데 이 단점은 어느 정도 스택, 힙 등으로 배우고 불렀던 사람들에게 단점이지 프로그래밍을 입문한지 그리 오래 되지 않은 학습자라면 오히려 좋은 번역이라고 생가이 듭니다.

책을 읽으시면서 눈으로만 읽지 마시고 꼭 실습을 같이 하시기 바랍니다. 포인터를 다루는게 익숙하고 능숙하신 분들이 이 책을 읽을 확률이 낮기 때문에 이 책을 읽는 대부분의 독자는 포인터에 능숙하지 않은 분들일 것입니다. 상상 디버거로 머릿속으로 코드를 돌려가면서 책을 읽으실 수도 있지만 손으로 쓰고, 실행 직접 보시면서 숙달 하시기 바랍니다.


한빛미디어 2022 도서 서평단 "나는 리뷰어다"의 일원으로 도서를 제공받아 작성한 리뷰입니다.

오랜만에 자료구조에 관련된 책을 본다. 대학시절 배운게 끝이긴했는데 기억 잘 안나고... 프로그래머가 되려면 자료구조를 배워두면 도움이 많이 되긴 한다. 프로그램을 짤때 적절한 자료구조와 알고리즘이 필요하기 때문이다. 자료구조로 데이터를 효율적으로 관리하는 기법과 알고리즘과 상황별 알고리즘 설계기법을 배울 수 있는데 성능분석과 설계 그리고 이해하는데에도 도움이 되는 책이다. ​ 이 책의 구성은 학습목표로 핵심개념과 대략적인 학습흐름을 제시하여 목표를 세우고 연습문제로 배운것을 활용한다. 또한 보충설명, 참고사항, 관련용어를 설명하고 학습을 진행하면서 알아두면 좋은 내용이나 혼동하기 쉬운 내용을 설명하고 학습한 내용을 곧바로 점검할 수 있도록 간단한 퀴즈를 제시한다. 뭔가 대학때 1학년으로 돌아가 각잡고 교과서처럼 공부해야하는 도서라고 생각되었다. 컴퓨터가 전공인 대학생, 현업 프로그래머, 프로그램입문자가 보기에 좋은 책으로 추천한다. ​ "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

이 책은 제가 본 자료구조, 알고리즘 책 중에 가장 괜찮은 책이라고 생각합니다. 예전 2009년에 처음 나왔던 ‘뇌를 자극하는 알고리즘’을 전면 개정하면서 제목도 바뀐 것으로 보입니다. 예전부터 사랑받고 검증된 내용이라 믿고 봐도 될 것 같습니다. 학교 다닐 때 저도 봤던 기억이 있는데 예전보다는 확실히 책이 더 깔끔하고 가독성이 좋아졌네요.

 

자료구조, 알고리즘이라는 것이 배우는 내용이 정해져있어서 목차를 보니 컴퓨터 공학과 시절에 배웠던 반가운 단어를 볼 수 있었습니다. 이 책은 크게 자료구조, 알고리즘, 알고리즘 설계 기법 이렇게 3부분으로 나눌 수 있습니다. 순서대로 보면서 공부하면 됩니다. 각각의 자세한 공부내용은 아래와 같습니다.

 

자료구조

리스트, 스택, 큐, 트리

 

알고리즘

정렬, 탐색, 우선순위 큐와 힙, 해시 테이블, 그래프, 문자열 탐색

 

알고리즘 설계 기법

알고리즘 성능 분석, 분할 정복, 동적 계획법, 탐욕 알고리즘, 백트래킹

 

이 책은 C언어를 사용해서 자료구조, 알고리즘을 설명합니다. 다른건 몰라도 자료구조, 알고리즘은 메모리를 직접 다루면서 배우는게 필요하기 때문에 괜찮은 선택이라 생각합니다. 여기에 나온 예제를 돌려보면서 이번 기회에 C언어도 배워보는 것을 추천하고 싶네요. C언어를 안다는 건 이직을 할때도 확실히 유리하다 생각합니다. 

 

거의 모든 공부가 그러하고 이 자료구조, 알고리즘도 확실히 뒤쪽이 더 어렵습니다. 라이브러리 사용만하는 개발에서 벗어나 내가 뭔가를 밑바닥에서부터 개발할 수도 있겠다는 마음으로 끈기를 갖고 하나 하나 도전하면 어떨까싶네요. 처음에 공부 가성비는 떨어질지 모르나 여기에 취미를 붙이면 컴퓨터가 돌아가는 방식을 좀 더 알게 되면서 더 나은 개발자로 확실히 레벨업을 시켜줄지도 모릅니다.

 

우리가 직접 자료구조, 알고리즘을 다룰 일은 생각보다 많지 않을 수도 있습니다. 하지만 배워야 하는 이유도 있습니다. 나중에 고급 개발자로 일하다보면 자료구조, 알고리즘 선택에 있어 도움이 되기 때문입니다. 만약 하드웨어를 직접 다루는 임베디드 개발자라면 직접 자료구조, 알고리즘을 수정하거나 다시 개발해야 할지도 모릅니다. 요즘은 구글과 같은 유명 인터넷 기업에서 코딩 테스트를 하는데 그것을 대비하기 위해서라도 자료구조, 알고리즘 공부는 필요합니다. 개발자가 되기위해서 필수는 아니지만 배워두면 반드시 도움이되는 공부라고 생각합니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

책소개

이 책은 자료구조와 알고리즘 및 알고리즘의 설계 방법에 대해 기술하고 있는 책이다.

C언어로 완벽하게 구현된 코딩소스를 제공하기 때문에 C언어에 대한 기초 지식을

가지고 있어야 한다. 그래서 이 책은 알고리즘 뿐 아니라 C언어에 대한 내용까지도

한번에 배울 수 있는 책이기도 하다. 그렇다고 자바 개발자가 이 책을 읽지 말란 법은 없다

자바에서도 스택, 큐, 리스트는 엉청나게 많이 사용하고 있으니까 말이다.

그 내부 구조가 어떻게 구현되어 있는지 정확하게 이해할 수 있는 계기가 될거라 생각한다.


책은 처음부터 천천히 단계를 밟으며 설명하고 있다. 

각 chapter 마다 처음에는 스택, 큐, 리스트, 트리 등에 대해 기본내용을 설명하고 

그 자료구조를  C언어로 어떻게 구현하는지 보여주고 

그림을 이용하여 자료의 추가, 삭제 시 발생할 수 있는 구조 변경을 설명하고 있다.

이 표현 방법은 자료구조를 이해하는데 가장 좋은 방법이라고 생각한다.

모든 설명이 끝난 후 최종적으로 전체적인 예제 소스를 기술하고 있기 때문에

코드를 읽어 내려가면서 다시 한번 자료구조의 내용을 이해할 수 있게 구성되어 있다.


알고리즘을 설명하는 부분은 정렬과 탐색, 힙, 해시 테이블, 그래프등을 설명하고 있는데

개념을 이해하고 예제코드를 공부하면서 전부터 궁금했던 DBMS의 내부구조를 이해하는데

조금이나마 도움이 될 수 있었다.


알고리즘 설계 기법은 굉장히 흥미로운 부분이었다. 특히 백트래킹 부분의 미로탈출, 

8개의 퀸 문제는 아드레날린을 촉진시켜 오랫동안 구조의 논리를 생각하게 만들기 충분했다.

 

그래서...

거의 30년전 전공으로 C언어를 배울 때 정렬, 미로탈출하는 방법을 과제로 받곤 했었다.

그때부터 지금까지 자료구조의 핵심은 변함이 없다는 것을 다른 독자들은 알고 있을까?

이 책은 자료구조의 이해와 알고리즘의 설계 기법에 대해 적확하게 기술하고 있다.

이 책을 읽으면서 나는 30년전에 배우지 못한 분할정복, 동적 계획법, 백트래킹 등의 설계 기법을 다시금 

생각하게 하고 배우는 계기가 되었을 뿐아니라 자바로 개발하고 있는 현재 프로젝트에서

고객의 요구사항 중 응용할 방법에 대해 다시 고민하게 만드는 시간을 가지게 되었다.


초중급 대상의 독자에게 필요한 책이지만 자료구조와 알고리즘에 대해 막연했던 지식을 

정리하고자 하는 독자뿐 아니라 기본만 정리된 C언어 책을 공부한 독자가 C언어가 

어떻게 구현되는지를 알고 싶은, C언어를 잘 읽고 코딩하기를 원하는 독자에게도 

훌륭한 지침서가 될거라 생각한다.


개발자는 꼭 한번 자료구조와 알고리즘에 대해 알고 가기를 바란다.


"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 
 

 

1-220827.jpg

 

 

 

IT기업에서 개발자를 뽑을 때 면접과 코딩 테스트를 보게 됩니다.

 

기업에서 테스트를 보는 이유는 자료구조와 알고리즘 개념이 있는지 확인하기 위함입니다.

 

작동 원리를 잘 알아야 개발할 때 활용을 할 수 있는데요.

자료구조와 알고리즘을 알아야 적절한 효율적인 코드를 작성할 수 있습니다.

 

살펴볼 책은 '이것이 자료구조+알고리즘이다 with C 언어'입니다.

 

자료구조, 알고리즘, 설계기법 등 15가지 개념을 다양한 연습문제로 풀어 볼 수 있습니다.

 

108개의 예제소스도 있어서 한번 혼자서도 풀어보고 예제소스를 참고하며 이해하며 공부할 수 있습니다.

 

C언어로 배워보는 자료구조와 알고리즘에 대해 같이 살펴보겠습니다.

 

 

3-220827.jpg

 

 

1) 쉬운 그림 설명과 학습을 돕는 퀴즈

복잡한 수식만 보면 알고리즘을 이해하기 쉽지 않습니다.

 

다양한 그림 예제를 통해 개념을 이해하기 쉽도록 구성되어 있습니다.

 

또한 장마다 비타민 퀴즈와 주제에 대한 연습문제는 학습을 도와줍니다.

 

수식은 필요한 정도만 담겼습니다.

 

자료구조는 유용한 리스트, 스택, 큐, 트리를 알려줍니다.

 

알고리즘은 가장 많이 쓰이는 정렬, 탐색, 우선순위 큐, 힙, 해시테이블, 그래프를 다룹니다.

 

 

2-220827.jpg

 

 

 

2)C언어로 배우는 자료구조

자료구조의 기초에 대한 간단한 설명과 구현 방법까지 배울 수 있습니다.

 

컴퓨터 전공 학생들도 학부 수업 중에 C언어를 배우게 될 텐데요.

C언어는 메모리를 잘 다뤄야 합니다.

 

포인터 개념과 구조체도 알아야 해석을 할 수 있습니다.

 

스택과 힙에서 데이터를 다루는 방법도 알아야 문제없이 코드가 작동하게 됩니다.

 

메모리를 직접 할당도 해주고 해지를 해줘야 합니다.

 

지정한 메모리보다 많은 메모리를 사용하면 프로그램은 죽게 되기 때문입니다.

 

 

 

 

Ps

자료구조와 알고리즘을 공부하다가 궁금한 부분이 생기게 됩니다.

 

저자는 Q&A 카페에 질문이 올라오면 직접 답변해줍니다.

 

문제를 만나면 직접 풀어보며 궁금한 것을 해결할 수 있습니다.

 

이 책은 C언어로 알고리즘 개념을 익힐 수 있도록 알려줍니다.

 

자료구조와 알고리즘 개념을 학습하고 제대로 이해하고 싶은 취업 준비생분들에게 이 책을 추천합니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

image.png

 

 

자료구조 와 알고리즘에 대해 c언어 기반으로 다룬 책이다.

c를 기본적으로 문법은 익힌정도에서 넘어와야되는 책이고,알고리즘과 자료구조는 인터뷰시 단골 소재 이다.

그만큼 알고리즘과 자료구조를 이해하는 상태에서 코딩이 들어가면, 코딩에 녹아들어 좀더 좋은 코드를 만들어 낼 수 있다고 개인적으로 생각한다.

 

2.png

책에서 애기하는 학습로드맵이다.

 

 

 

 

자료구조와 알고리즘에 대해 이해를 하다보면 최종 알고리즘 설계기법까지 이해할수있는 로드맵을 제시하고

 

3.png

 

스택에 대한 구조에 대한 설명을 하고 있다.

해당설명과 같이 그림과 자세한 설명으로 독자의 이해를 돕고 있다.

4.png

 

 

실질적으로 많은 코드들의 예제들이 있어서 해당알고리즘이 어떻게 돌아가는지 c언어 기반으로 설명해준다.

단점은 코드에 대한 description 은 조금 부족한 느낌이 든다.

 

허나 코드는 부가적인것이고, 이해를 돕기위한 과정이라고 보면 설명은 쉽게 해주는 책이므로 자료구조나 알고리즘을 파악하는 목적에서는 좋은 책이다.

 

 

image (1).png

 

 

ming64 를 설치하여,vsc 에서 코드를 실행해보았다.

datset에 정보에서 구매포인트가 671.78 인 데이터를 바이너리 서치를 통해 찾아내는 알고리즘이다.

 

id :1780 에서 해당데이터를 찾을수가 있다.

책에서 설명하는 최단경로 탐색이나 문자열 탐색같은 부분은 실무에서도 충분히 활용가능한 알고리즘 들이다.

c언어를 활용한 자료구조와 알고리즘을 파악하는데는 이보다 좋은책은 없는것같다.

 

 

 

"한빛미디어 제공으로 작성된 리뷰입니다. "

 

이 책은 C언어를 이미 학습한 사람을 기준으로 자료구조와 알고리즘 중에 가장 필수적이고 기초적인 부분을 다루고 있습니다. 영어로 된 원서를 번역한 것이 아니라 실무자로서 업계에서 일했고 여러 책을 집필한 한국인 저자께서 쓰신 책이기에 글이 읽기 쉽고 책의 내용을 이해하기가 좋습니다. 또한 학습 중에 생길 수 있는 의문을 저자께서 '여기서 잠깐' 등의 명칭을 가진 섹션에서 풀고 있기에 학습을 끝까지 진행하는데 도움이 됩니다.

# 요약

+ C 로 자료구조를 기본부터 구현해가며, 메모리 관리/자료구조/알고리즘에 대한 이해를 넓힐 수 있음

+ 정렬, 탐색, 해싱, 그래프, dp 등 핵심적인 알고리즘 및 자료구조를 어떻게 C 언어로 구현할 것인지 배울 수 있음

# 장점

요즘 자료구조나 알고리즘은 파이썬으로 공부하는 경향이 있는데, C 언어로 직접 스택/힙 메모리를 관리하며 자료구조를 한 번쯤 구현해보는 경험은 전공자에게 있어서 매우 큰 자산이 된다. 그 한 번을 함께하기에 적합한 책이라는 생각이 든다.

---

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."



파트 1에서 c언어 복습과 배열, 리스트, 스택, 큐, 트리의 개념과 이걸 어떻게 표현하는지 한다.

근데 포인터 때문에 진짜 울고 싶었다. 아직 처음인데 이렇게 읽기 싫어질 줄은 몰랐다.

C 언어는 정말 어쩔 수 없이 문제풀이를 위한 공부만 한 나로서는 이게 무슨 소리야... 싶었다.

 

알고리즘이라고 하면 좀 뭔가 거창하고 뭔가 새롭고 할 거 같았는데 파트 2에서 정렬 알고리즘(버블, 삽입, 퀵) 이 되게 낯이 익었다. (여전히 합격 못한...) 자격증 공부에서 문제 푸는 법만 익힌 그것이었다. 이게 알고리즘이라니 새로웠다. 약간 네가 왜 거기서 나와 느낌...?

자격증 공부하면서 문제풀이만을 위한 것만 공부했던 사람이 한번 읽어보면 어떨까 생각한다.



이 리뷰는 한빛미디어로부터 도서를 제공받은 후 작성했습니다.

 

 

이것이 자료구조+ 알고리즘이다 with C언어

개발 쪽에서 가장 유명한 출판사인 한빛미디어의 책이다.

이 책은 C언어를 기준으로 알고리즘과 자료구조를 설명한다.

 

 

컴퓨터 공학의 기본이 되는 자료구조, 알고리즘, 알고리즘 설계기법까지 알려주는 책이다.

리스트, 스택큐 같은 기초지식부터 점차 심화 단계로 올라간다.

트랙이 잘 나뉘어져있어 컴공 비전공자더라도 천천히 책을 따라가기 좋다.

 

 

이것이 자료구조+ 알고리즘이다 with C언어에선 자료구조의 기초, 개요, 간단한 설명과 

c언어로 구현하는 방법까지 알려준다.

C언어라 파이썬, 자바스크립트 등 다른 언어를 사용하는 사람이 따라하긴 쉽지 않지만

그래도 개념을 잡기 좋다.

컴퓨터공학 학부생이 읽기에도 좋을 것 같았다.

 

 

이것이 자료구조+ 알고리즘이다 with C언어에서는

간단한 자료구조 구현 외에도 그 자료구조를 이용해 짤 수 있는 

예제 프로그램들을 여럿 다룬다.

 

 

코딩테스트, 개발자 면접을 앞두고 

다회독하면 좋을 것 같았던

이것이 자료구조+ 알고리즘이다 with C언어.

 

코딩테스트 책으로 추천합니다

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
이것이 자료구조+알고리즘이다 with C 언어
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
이것이 자료구조+알고리즘이다 with C 언어
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
이것이 자료구조+알고리즘이다 with C 언어
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실