자료구조와 알고리즘을 함께 Java! - 퀴즈로 쏙쏙 이해하는 초보자를 위한 입문서
손상우 지음 / 비제이퍼블릭 / 2021년 4월
평점 :
장바구니담기


작년부터 나는 틈틈히 알고리즘 공부를 하고 있다.

알고리즘은 요즘 특히나 개발자에게 있어서 뗄레야 뗄 수 없는 관계가 되었다.

학생 때 자료구조에 대한 강의를 들었을 때 재밌으면서도 어렵게 느꼈었었는데, 알고리즘을 다시 공부하기 시작하면서 아직도 어렵다고 느낀다.

그래도 공부를 하면서 느낀 것은 알고리즘에 대한 이해가 있으면 개발할 때도 이를 바탕으로 로직을 좀 더 짧고 간결하게 만들 수 있고 속도와 효율적인 면에서 많은 도움이 된다고 생각한다.

작년에 처음 공부했던 책을 완독하고 나서 여러 책을 보았었는데, 이제 다시 시작한 나에게는 조금 어렵게 느껴졌었다.

얼마 전 서점에서 오늘의 리뷰도서인 "자료구조와 알고리즘을 함께 Java!"라는 책을 보게되었다.

책 내용을 빠르게 훑어보았는데, 꼭 알아야하는 핵심 내용을 이해하기 쉽게 쓰여있었던 것이 읽어보고 싶다는 생각을 갖게 했었다.

그리고 실습 문제도 있어서 이해한 내용을 바탕으로 직접 풀어본다면 머리 속에 오래 남지 않을까도 싶었다.

그래서 이 책으로 다시 한번 알고리즘을 익혀보자라고 생각했었는데, 마침 비제이퍼블릭에서 하는 도서 증정 이벤트를 페이스북을 통해서 알게 되었다.

여러 책들의 증정 이벤트였는데 마침 내가 읽어보고 싶었던 이 책도 포함되어 있어 신청하게 되었다.

이번에도 좋은 기회로 도서 증정 이벤트에 당첨이 되었는데, 역시나 책을 받고 나서 읽어보니 만족도가 높았다.

알고리즘에 대한 이해를 시작으로 배열과 여러 자료구조에 대한 내용이 이어진다.

특히나 내가 중점적으로 보았던 부분은 후반에 있는 정렬이다.

버블 정렬, 선택 정렬, 삽입 정렬, 셸 정렬, 병합 정렬, 퀵 정렬을 각 챕터로 소개하여 개발을 하면서도 케이스에 따라 정렬 알고리즘을 적용한다면 특히나 속도 측면에서도 많은 도움을 받을 수 있을 것이라고 생각한다.

잠시 앞서 언급한 정렬 알고리즘에 대해 간단히 정리해보았다.

# 버블 정렬

인접한 두 요소의 값을 비교하여 대소관계에 따라 서로 자리를 바꾸는 정렬 기법이다.

속도가 매우 느린 정렬 알고리즘이다.

# 선택 정렬

배열의 요소를 순회할 때마다 최소값과 최대값을 찾아서 배열의 앞쪽으로 정렬하는 기법이다.

# 삽입 정렬

배열의 첫번째 인덱스부터 시작하여 배열의 첫번째 요소까지 비교하여 정렬 위치를 찾아 삽입하는 기법이다.

버블 정렬과 선택 정렬에 비해 효율성이 좋다.

# 셸 정렬

삽입 정렬 알고리즘의 단점을 보완하였다.

배열의 요소들을 얼마만큼 묶을 지 계산하기 위한 간격을 계산하여 이 간격을 이용하여 배열을 부분 리스트로 나눈 후 각각 삽입 정렬을 수행한다.

# 병합 정렬

배열을 균등한 크기로 분할할 수 없을 때까지 분할하여 두 부분 리스트를 정렬과 동시에 병합하여 정렬 결과를 구하는 기법이다.

# 퀵 정렬

피벗이라는 정렬 기준 값으로, 왼쪽은 피벗보다 작은 값으로 오른쪽은 피벗보다 큰 값으로 두고 왼쪽과 오른쪽의 각각 부분 리스트로 보고 두 개의 부분 리스트에서 각각 피벗을 선정하여 피벗을 기준으로 원소를 나누어 정렬하는 기법이다.

가장 빠른 알고리즘으로, 병합 정렬보다 메모리 사용량이 적다.

나의 경우, 이 책을 매일 한 챕터씩 보면서 실습을 직접 풀어보았다.

확실히 내용만 읽어서는 알고리즘을 이해하는 데 어려움이 있다고 생각한다.

알고리즘을 공부하려면 어떤 책이든 강의를 보든지 직접 풀어보고 여러번 풀어보아야 내 것으로 만들 수 있다.

이 책의 내용과 실습 문제 그리고 각 알고리즘 유형에 따른 동작 원리를 나타낸 그림을 놓치지 않고 본다면 초보자에게 있어서 좋은 입문서라고 생각한다.

너무 딱딱하지도 그렇다고 너무 짧고 간단히 설명한 내용이 아니기 때문에 어떤 책을 입문서로 보면 좋을지 고민한다면 추천한다.


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo