본문 바로가기
[Review]/Book

[도서 리뷰] 프로그래머스 코딩테스트 문제풀이 전략: 자바 편

by 해피빈이 2023. 4. 9.

> 진행에 앞서

2년 전까지만 하더라도 개발자 공급이 수요를 따라가지 못할 정도로 개발자 몸값이 높아졌던 시기가 있었다.

물론 요즘이라고 그 몸값이 내려간 것은 아니지만, 요즘은 개발자 취업하기는 쉽지 않은 것이 사실이다.

애초에 전체적으로 일자리가 많이 줄었으며, 개발자도 그에 따른 영향이 없지 않기 때문이다.

그렇지만 그 때에도 그랬으며 지금도 동일한 몇 가지가 있는데 그 중 하나가 바로 개발자 취업 및 이직을 하기 위해 거쳐야 하는 관문으로 많은 곳에서 코딩테스트를 진행한다는 사실이다.(모든 곳에서 진행하지는 않지만, 대체로 잘 알려진 곳이라면 빠지지 않는 것 같다.)

물론 검증한다고 하는 곳이라고 하더라도 코딩테스트가 아닌 개발 과제를 보는 곳도 있기는 하지만, 과제에는 시간 및 노력 비용이 인터뷰어와 인터뷰이 모두에게 많이 드는 편이기 때문에 상대적으로 비용 절약이 가능한 코딩테스트를 쉽게 도입하는 것으로 보인다.

 

하지만, 그 내용과 난이도는 갈수록 까다로워지고 있는 실정이기에 수 년전에 보았던 수준으로 현재의 문제를 대한다면 아마 통과하기 어려울 것 같다. 그렇듯이 유형이나 기준이 나날이 다양해지고 높아지는 이런 상황에서 이제는 체계적인 학습이 필요한 시대가 되었다고 생각한다. 그래서 인프런, 유데미 등의 유료 강의는 물론이고, 유튜브를 통한 무료 강의도 많이 나와있는 상황이다. 물론 블로그를 통한 학습도 괜찮다고 생각을 한다. 하지만 모두 다양하게 각각의 방법으로 가르쳐 주고 있기 때문에, 본인의 스텝에 맞추어 학습하기가 쉽지 않을 수 있다고 생각한다. 그런 경우 그런 보폭을 맞추기 좋은 방법은 바로 책으로 학습하는 것이다. 이런 시기에 학습하기 좋은 책이 출간이 되어 살펴보게 되었다.

 

> 책에 대한 간단한 정보

앞 표지

이 책의 제목은 정확하게는 '취업과 이직을 위한 프로그래머스 코딩테스트 문제 풀이 전략: 자바 편'이다. 생각보다 길다. 제목에 표현하고 싶은 단어가 많이 포함되어 있는 것으로 보인다. 이 책을 보기 전까지는 몰랐던, PCCP 시험에 대해서도 알게 되었다. 자격증 시험은 시대를 대변하는 의미도 담고 있는데, 요즘 코딩테스트의 중요성이 이정도라고 느껴진다. 오히려 10년 전의 정보처리기사, SCJP(OCJP) 등의 자격증은 이제는 의미가 있을까 싶은 정도의 생각도 든다. 이것은 비단 신입에게만 해당되는 것은 아니다. 경력 이직시에도 해당이 된다. 그 중 많은 비중으로 백엔드 개발자와 안드로이드 개발자 등이 자바를 이용하고 개발하고 있기 때문에, 자바를 이용하여 나온 이 책이 유용할 것이라고 생각한다.(물론 이 책과 함께 출간된 파이썬 버전도 데이터 분석에 많이 쓰이기 때문에 유용할 것이다.) 이 자바 버전을 조금만 응용하면 바로 코틀린으로 테스트하는 것도 가능하기 때문에 그렇게 한다면 활용도는 더 올라갈 것 같다.(물론 코틀린 버전이 새로 나오면 그것도 금상첨화)

 

> 인상깊은 부분들

단계별, 시간이 없을 경우 등을 고려한 커리큘럼

기초단계, 초급단계, 중급단계, 고급단계로 나누어서 구성하였다. 그래서 내가 지금 푸는 문제가 어느정도인지 인지할 수 있기 때문에, 만약에 조금 어려움을 느낀다면 다른 문제를 더 가져와서 학습하는 것도 좋을 것 같다.

그리고 만약 시험을 바로 앞두고 있는 상황이라면, 그 중에 중요하다 생각하는 문제들만 추려서 공부하는 것도 추천하고 있다.(물론 그 양이 적어보이지는 않지만, 그래도 집중적으로 공부하는 중이라면 요긴할 것이다.)

 

문제 풀이 과정을 효율적으로 하는 흐름

문제 풀이를 할 경우 큰 맥략에서 풀이흐름을 먼저 고민한 뒹, 효율성을 검증하고, 그 다음에 풀이를 작성한 다음 제출을 시도해보는 것을 권하고 있다. 이러한 코딩테스트에서 시간복잡도는 생각보다 큰 비중을 차지하고 있으며, 시간복잡도에서 해결이 되지 않을 경우 전체적인 풀이를 변경해야 하는 상황이 발생할지도 모르기 때문이다. 우리가 실전 개발시 효율성을 생각하여 개발하되, 그것을 함수나 모듈 단위로 개발하는 것처럼 이것 역시 그러해야 함을 알려주고 있다.

 

문제 풀이 흐름

이 책은 여러 예제 문제를 같이 풀어보는 방식으로 되어 있다. 각 문제에서 실제 코드를 작성하기 전, 이렇게 문제풀이 흐름을 작성하고 시작하게 되는데, 이것은 내가 기존에 해오던 방식과 유사하여 눈에 띄었다. 이것을 나의 경우에서는 주석으로 작성해 놓고, 단계별로 하나씩 코드를 작성하고 해결하곤 하였다. 물론 생각대로 잘 안되는 경우도 있지만, Divide And Quanquer Rule에 의해 해결하는 방식 중 하나이기에 이럴 경우 문제가 쉽게 접근되는 경우도 많다는 생각에서 동의한다.

 

첫 번째 문제 해결시 사용한 방법과 결과

각 주석에 번호를 매기고 그대로 문제를 해결하였다. 그 결과 가뿐히 통과할 수 있었다.

 

문제 설명하는 과정

앞서 이야기 한 것처럼 이 책에서는 문제를 같이 해결하는 방식으로 설명하는데, 그 방법 중에 그림으로 표현한 것도 많이 있었다. 어떻게 하면 어려워 보이는 문제를 좀 더 쉬운 방식으로 표현할 것인지 이야기 해주는 것이 좋았다. '이건 당연히 이해해야해!' 라고 말하기 보다는, '이해하기 어려울 수 있으므로 이렇게 해보면 좀 더 쉬울거야'라는 방식으로 이야기 하는 것이 책 전반에 걸쳐 있었기에 친근감을 느끼기도 하지만, 실제로 이해도 어렵지 않게 할 수 있었다. 그만큼 코드에 옮기는 과정에서도 충분히 이해를 하고 옮길 수 있었다.

 

이 책의 장점을 실어 정리한 뒷 표지

이 책의 뒷표지에는 책의 장점을 어필하고 있다. 프로그래머스의 기출문제를 다루고 있다는 점과, 문제 푸는 과정을 그대로 책에 수록하였다는 점. 그리고 다양한 풀이법으로 접근한 내용과, 자바스러운 풀이 기법의 사용. 추가로 카카오 블라인드 테스트와 PCCP 모의고사 내용에 대해서도 추가함으로써 실전에 더욱 가까이 다가가고 있음을 이야기 해주고 있다.

 

참고로 이 책에서 다루고 있는 예제는 아래의 링크에 접근하면 볼 수 있다.

https://github.com/gilbutITbook/080337

 

GitHub - gilbutITbook/080337

Contribute to gilbutITbook/080337 development by creating an account on GitHub.

github.com

 

> 괜찮은 부분

1. 자바를 효율적으로 사용한 코딩 알고리즘을 이용하였다.

자바에서 다루는 Collection은 기본이고, 좀 더 높은 버전에서 활용 가능한 stream도 다루고 있다. 그래서 최대한 간결한 코드와 속도를 높이기 위해 노력한 흔적이 보인다. 이것은 자바를 효율적으로 다루도록 할 뿐 아니라, 언어 자체가 자바를 효율적으로 사용하도록 만들어진 코틀린에서도 응용하기 좋은 내용이 된다. 그리고 경우에 따라서는 클래스를 정의하여 충분히 활용할 수 있도록 함으로써, 기본형을 이용한 자료구조를 억지로 하다가 어려움을 겪도록 하는 것보다는 자료구조에서도 효율성있게 작성할 수 있음을 보여주고 익숙할 수 있도록 만들어준다고 생각한다.

 

2. 수준있는 내용을 다루면서도, 독자의 눈높이를 고려하여 어렵지 않도록 노력하였다.

이 책의 내용은 낮은 레벨부터 점차 많이 올라가도록 하고 있다. 문제 수만 보아도 79개의 예제를 다루고 있다는 점만 보아도 결코 적지 않다는 것을 알 수 있다. 이처럼 점차 수준을 올릴 수 있도록 노력한 부분이 눈에 보이며, 그만큼 다양한 유형도 다루고 있다. 많이 볼 수 있는 DFS, BFS, 그리디 알고리즘도 있으며, 동적 프로그래밍, 이진 탐색, 스택과 큐의 주제도 빼놓을 수 없기에, 그런 내용도 포함되어 있다. 그것에 앞서 재귀 및 완전탐색에 익숙해질 수 있도록 하고 있다. 앞의 내용을 이해해야만 뒤의 내용을 이해할 수 있는 구조인데, 본인의 수준이 높다면 바로 뒤로 넘어가도 전혀 문제가 되지 않는다.

 

3. 프로그래머스의 예제 내용을 직접 수록하였다.

이 부분은 저작권 관련 부분이다. 사실 다른 알고리즘 사이트인 Hackerrank, Codility, Leetcode 등을 이용할 때에는 해당 문제를 개인 블로그에서 인용하는 것이 문제가 되지 않을지 모르나, 프로그래머스 문제는 수록하면 안되는 것으로 알고 있다. 그래서 실제 개인 포스팅에서 문제 풀이에 대한 개인의 견해를 보고싶은 경우에도 쉽게 볼 수 없도록 되어있어서 아쉬움이 있기도 하다. 하지만 이 책에서 다루는 예제는 모두 프로그래머스에서 다루는 내용을 인용한 것이기 때문에 평소에 궁금했던 문제가 있던 사람이라면 좀 더 이 책이 유용할 것 같다고 생각한다.

 

> 아쉬운 부분

1. 설명이 부족한 부분들도 존재한다고 느낄 수 있다.

이 부분은 개인차에 따라 달라질 수 있다고 생각이 든다. 사실 당연하지만, 이 책의 내용은 완전 입문자나 초보자가 보기에는 좋지 않을 수 있다. 대략적인 기본지식이 있으나, 체계적인 정립이 되지 않은 경우 이 책이 도움이 될 수 있다는 데에는 동의한다. 하지만 너무 초보일 경우에는 이 책의 많은 설명을 이해하기 위해서 반드시 다른 레퍼런스를 참고할 필요가 있을 것이다. 사실 이것은 아쉽다고 표현은 했지만, 당연하다고 생각이 든다. 이러한 것은 트레이드 오프 되는 영역이기에 책의 지면을 최대한 절약하면서 설명을 담기에는 현재의 방법이 최적일 수 있기 때문이다. 하지만 너무 입문자의 수준에서 본다면 어려울 수 있다는 것은 사실이다.

 

2. 자바에서 제공하는 유틸 및 스트림 메서드에 대해 효율성이 표현되어 있지 않다.

이 책에서 문제를 푸는 방식으로 많은 경우 Collection Util이나 stream을 응용하고 있다. 효율적인 코드 사용을 위해서는 필요하지만, 어떤 어려운 문제를 앞두고서는 각 메서드를 사용하는 데 있어서도 시간복잡도가 얼마나 소요될지에 대해서도 안다면 도움이 될 것 같다는 생각이 들었다. 만약 비효율적이라면 남발해서는 안되기 때문이다. 동적 프로그래밍으로 어느정도 해소되는 경우도 있겠지만, 이마저도 한계를 빠르게 극복하기 위해서는 사용을 지양해야 하는 비효율적인 메소드도 알고 있어야 좋을 것 같다는 생각에 해당 부분이 있었으면 좋았겠다는 생각이 들었다.

 

> 추천 독자

- 취업 및 이직을 앞두고 있는 개발자(자바 및 코틀린)

- 알고리즘 문제풀이를 취미로 하고 있는 개발자

 

> 개인적인 평점

- 가격: 7 / 10

- 내용: 10 / 10

- 디자인: 9 / 10

- 구성: 10 / 10

 

> 정보

저자: 김현이(구글코리아 소프트웨어 엔지니어)

출판사: 길벗

가격: 40,000원

전체 페이지: 668페이지

 

** 이 리뷰는 "길벗"을 통해 도서를 제공받아 작성하였습니다.

반응형

댓글