본문 바로가기
나의 생각/서평

취업과 이직을 위한 프로그래머스 코딩 테스트 문제 풀이 전략

by 카펀 2023. 5. 21.

* 본 글은 리뷰 진행을 위해 길벗출판사에서 책을 무료로 제공 받았으며, 그 외 별도의 대가는 받지 않았습니다.

 

목차

0. 소개

1. 이 책을 읽으면 좋은 대상

2. 유형과 소개

3. 이 책의 메리트

4. 제가 추천하는 책 학습 방법

0. 소개

좋은 기회를 통해, 코딩 테스트를 위한 책을 제공받아 리뷰하게 되었습니다.

취업과 이직을 위한 프로그래머스 코딩 테스트 문제 풀이 전략: 자바 편 입니다 (이하 전략 책). 자매서(?)로 파이썬 편도 있습니다.

저는 취업과 이직을 준비할 때는 C++를 사용해서 코딩 테스트를 준비했지만, 최근에는 Java와 비슷한 Kotlin으로 문제풀이를 매일 진행하고 있습니다. 그러다 보니, 아무래도 Kotlin과 유사한 Java 편을 리뷰하게 되었습니다.

특히 취준생 분들은, 코딩 테스트를 어떤 언어로 준비하는 것이 좋을지 고민하는 경우를 많이 봤습니다. 웹 백엔드를 준비하는 분들을 기준으로, 코딩 테스트는 파이썬이 쉽고 편리하다는 인식이 지배적이지만, Java/Spring 생태계로의 취업을 원하는 분들이 자바로 코딩 테스트를 준비하는 경우도 제법 되었습니다.

어떤 것이 더 낫다, 정답이라고 제가 판단을 내리기는 어렵습니다. 다만 만약 스스로가 자바로 코딩 테스트를 준비하도록 결심했다면, 이 책이 좋은 가이드가 되어줄 수 있을 것이라고 생각합니다.

 

코딩 테스트는 그 실효성에 많은 의문이 있지만, 현재 가장 대중적으로 채택되는 채용 절차 중 하나임은 부정할 수 없습니다. 얼마 전에 2023 팀네이버 신입 개발자 공채 역시 코딩 테스트와 서류로 수많은 지원자들 중 면접 대상자를 선정했으며, 그 난이도 역시 만만하지 않았습니다. 시간이 지날수록 코딩 테스트가 고시화 되고 있다는 말도 있는 만큼, 점점 유형이 정형화되고 있고, 학습을 위한 소스가 증가하고 있으며, 그런 만큼 효율적인 학습법이 필요합니다. 특히나 chatGPT의 등장으로, 많은 코딩 테스트에서 IDE 사용 금지, 웹 검색 금지 등 제한 조건까지 빡빡하게 걸고 있는 것이 현재의 추세입니다.

저는 예전에 코딩 테스트 준비에 관련된 글을 쓰기도 했고, 현재도 매일 1문제 이상 풀면서 감을 유지하려고 노력 중입니다. 네카라쿠배 등으로 대표되는 IT 기업을 준비하면서 코딩 테스트의 트렌드를 파악하기도 하였고, 현재도 그런 분들에게 도움을 드리고자 하고 있습니다. 그런 면에서, 이 책이 취업/이직을 준비하는 신입, 중고신입 혹은 주니어 개발자 분들에게 얼마나 도움이 될 수 있을지 솔직하게 판단해 보았습니다. 이 글이 단순한 도서 리뷰 뿐만이 아닌, 코딩 테스트 자체에 대한 제 의견을 추가한 가이드라고 생각해 주시면 좋겠습니다.

1. 이 책을 읽으면 좋은 대상

우선 당연하게도, 어떤 이유든 간에 Java로 코딩 테스트를 준비하려고 마음 먹으신 분들에게 도움이 됩니다.

책에서는 혹시라도 기초가 다소 부족한 분들을 위해, 시간 복잡도(2장), 배열(3장), 자주 등장하는 자료 구조(11장) 등을 통해 기초 개념을 설명해 줍니다.

하지만 코딩 배경이 전혀 없는 분이라면, 이 책은 다소 이르다고 말씀드려야 할 듯 합니다.

기본적으로 Java를 통해 코딩을 해 본 경험이 있어야 합니다. 책에 적힌 코드를 보고 이해할 수 있어야 하며 (알고리즘은 이해를 못 하더라도 코드 자체는 읽고 뜻을 파악할 수 있어야 한다는 뜻입니다), 기본적인 문제풀이 경험도 있으면 좋을 듯 합니다 (백준 브론즈 정도).

 

여기에 더해, 기본적인 자료 구조에 대한 이해도 필요합니다. 제가 생각하는 취업 준비용 코딩 테스트에서 필수적인 자료구조는 다음과 같습니다.

  • 배열(array), linked list (연결 리스트) - single/dobule linked list 포함, C++의 vector 포함
  • stack, queue, deque
  • priority queue
  • set (Java 기준 TreeSet/HashSet, C++ 기준 Set/Unordered_Set)
  • map (Java 기준 TreeMap/HashMap, C++ 기준 Map/Unordered_Map)
  • graph, tree(binary tree)

이 중 배열, 스택, 큐, 그래프, 트리, 우선순위 큐 등은 책에서도 설명이 나오기는 합니다. 하지만 기본적으로 각 자료 구조에 대해 학습을 한 번 하시고, 책을 읽으면서 부족한 부분을 채워 넣는 것을 추천드립니다.

추가로, 알고리즘에 대한 이해도 필요하긴 한데요. 이 책을 읽기 전에 이미 마스터할 필요는 없어 보입니다. 이 책의 전반적인 진행은 정형화된 기출 알고리즘에 대한 소개와, 이를 활용하는 문제에 대한 풀이로 진행됩니다. 책을 읽으면서 알고리즘을 공부하고, 문제를 풀어 보고, 부족하다고 느껴진다면 추가로 공부하는 식으로 진행하면 되겠습니다.

 

그러면 다시 원래 주제로 돌아가서, 이 책은 누가 읽으면 좋을까요?

보통 코딩 테스트는 신입 공개채용 코딩 테스트가 가장 어렵고, 수시채용(신입, 주니어 경력자 등)은 상대적으로 쉽다는 것이 정설입니다. 따라서 이렇게 요약해 보겠습니다.

  • Java로 코딩을 조금 해 봤고, 개발자 취업 준비를 본격적으로 시작해 보고 싶은 취업 준비생 및 학생
  • 다른 언어로 코딩 테스트를 준비하다가, Java로 전환해 보고 싶은 취업 준비생
  • 코딩 테스트를 어느 정도 준비해 봤고, 다소 난이도 있는 회사들의 코딩 테스트에 도전해 보고 싶은 취업 준비생
  • 중고신입/이직을 준비 중인 주니어 개발자

특히, 가장 대중적인 코딩 테스트 플랫폼인 프로그래머스에서 제공하는 문제들로 예시를 제공하고 있기 때문에, 프로그래머스의 환경에 익숙해지기에도 괜찮습니다. 위의 목록 중 하나라도 해당하는 분이 이 책을 통해서 준비하신다면 도움이 될 것이라고 확신합니다.

2. 유형

개인적으로 코딩 테스트는 수능 수학, 토익 등과 비슷하다고 생각합니다.

  • 정해진 시간 동인 문제를 풀 수 있는지 확인하는 시험이고,
  • 정형화된 문제 풀이 전략이 존재하고,
  • 각 회사별 기출 문제를 풀어 보는 것이 제법 도움이 되는 편이며,
  • 따라서 유형을 파악하고 문제를 많이 풀어 보는 것이 가장 중요합니다.

즉, 어떤 유형이 등장하는지 파악할 필요가 있겠죠?

회사마다 차이는 있지만, 제가 경험한 바로는 주로 이렇습니다.

  • 탐색 (BFS/DFS와 같은 완전탐색 등, binary search 등)
  • 문자열
  • 정렬
  • 구현
  • 최단 거리 (Dijkstra, BFS)
  • DP

즉, 이런 유형들을 각각 공부하고, 문제를 풀어 보며 익숙해진 다음, 각 유형이 필요한 문제를 마주했을 때, 떠올릴 수 있어야 합니다.

심지어 한 문제당 유형이 하나만 해당하지도 않습니다. 문자열, 정렬, 탐색을 사용하는 구현 문제가 나올 수도 있죠.

 

이 책에서 소개하는 유형은 아래와 같습니다.

  • 문자열 (4장)
  • 재귀 (5장)
  • 완전 탐색 (6장)
  • 정렬 (7장)
  • 이진 탐색 (8장)
  • 해시 (9장)
  • 동적 프로그래밍 (10장)
  • 구현 (12장)

얼추 겹치는 것 같나요?

DFS/BFS는 구현(12장)에서 함께 다룹니다. 그 외에는 전부 다루는 모양새입니다.

하나 아쉬운 점은, Dijkstra 최단 거리 알고리즘에 대한 설명이 없습니다. 최단 거리는 BFS를 다룰 때와 예제에서 한 번 다루기는 하지만, 최단 거리 알고리즘에 대해 깊이 있게 다루지는 않네요.

(BFS와 Dijkstra 알고리즘의 최단 거리 구하기에 대한 비교 참고)

그 외에는 주요 알고리즘을 전부 다루고 있다고 할 수 있습니다.

 

각 유형은 아래 순서를 따릅니다.

소개 - 디테일한 팁(옵션) - 관련 문제

제가 생각하는 신규 알고리즘/유형 학습 순서와 맥락이 같은데요.

먼저 알고리즘 자체를 학습합니다. 이진 탐색을 예로 들면, 어떤 상황에 사용하는 알고리즘이고, 어떤 특징을 가지며, 시간/공간 복잡도는 어떤지 소개합니다. 알고리즘의 정의를 알아야 제대로 사용할 수 있습니다.

다음으로, 일부 유형에서는 해당 알고리즘을 사용할 시의 팁을 파악합니다. 이진 탐색의 경우에는 분할 정복을 소개하네요. 이 부분은 처음에 알아 두면 좋지만, 문제를 몇 번 풀어 보면서 스스로 고민해 봐야 더 와 닿는 점입니다.

마지막으로, 해당 유형을 사용하는 문제를 소개합니다. 학습한 알고리즘이 어떤 식으로 실제 문제에 등장하는지 파악하고, 그 알고리즘을 사용해서 문제를 풀어 보면 됩니다.

 

책 역시 이러한 순서를 따르고 있고, 일부 선행이 필요한 유형 (예: DFS에 대해 다루기 이전에 재귀가 먼저 등장함)은 책의 순서에서도 앞에 위치하고 있습니다. 책을 따라 학습하기에 큰 어려움에 없겠다고 생각이 들었습니다.

3.  이 책의 메리트

앞서 제가 소개한 부분은, 사실 "꼭 이 책이어야 하나?" 에 대한 답변이 되지는 못합니다. 시중에는 수많은 코딩 테스트 준비를 위한 책이 있고, 이 중에서 이 책만이 가지는 메리트에 대해 고민해 보았습니다.

 

먼저, 이 책은 Java에 최적화되어 있습니다. 비교를 해 보자면, 제가 예전에 봤던 '이것이 코딩 테스트다 with 파이썬 (나동빈 저)'이 있습니다. 이 책은 코드를 파이썬으로 제공하지만, 저자의 GitHub에서 C++ / Java 코드도 제공합니다.

그렇다면 모든 코드를 제공하기 때문에, 어떤 언어로 준비해도 이 책을 보는 것이 가장 좋은 선택일까요?

예를 들어 보겠습니다. 문자열을 다루는 문제에서는, 두 개 이상의 문자열을 이어 붙이는 경우가 자주 등장합니다.

// C++
string combineElements(vector<string> elements) {
    string result = "";
    for (auto &element : elements) {
        result += element;
    }
    
    return result;
}

 

// Java
public String combineElements(List<String> elements) {
    String result = "";
    for (String element : elements) {
        result += element;
    }
    
    return result;
}

위의 두 코드는 문자열을 이어 붙이는 함수를 C++, Java로 각각 작성한 것입니다.

구조는 거의 동일하지만, 두 코드의 효율성도 동일할까요?

정답은 '그렇지 않다' 입니다. C++의 경우 O(N)의 시간 복잡도를 가지고, Java의 경우 O(N^2)의 시간 복잡도를 가집니다 (간단한 설명).

그렇다면 Java에서는 어떻게 O(N)의 시간 복잡도로 문자열을 이어 붙일 수 있을까요?

 

전략 책 자바 편에서는, 문자열에 대해 소개할 때 StringBuilder도 함께 다룹니다. 즉, Java에서는 StringBuilder 클래스를 사용해야 문자열 목록을 합칠 때 O(N)으로 해결할 수 있다는 것인데, 이런 Java만에 해당하는 포인트를 다룬다는 점이 중요합니다. 어차피 Java로 코딩 테스트를 준비할 것이라면, 언어별 최적 전략 역시 알아야 한다는 점이죠.

 

다음으로, 이 책은 프로그래머스의 예제를 함께 다룹니다. 앞서 언급했듯, 프로그래머스는 2023년 현재 가장 대중적인 코딩 테스트 플랫폼입니다. 특히 신입 코딩 테스트의 거의 대부분은 프로그래머스에서 진행된다고 해도 과언이 아닙니다. 그렇다면, 실제 코딩 테스트에 가장 가까운 환경에서 연습하는 것이 실제로 도움이 될 것입니다. IDE 사용 금지, 웹 검색 금지 등을 전제하고, 프로그래머스의 코드 작성 창에서만 작성하는 연습을 할 수도 있고, 그러다 보면 쉽게 풀리지 않는 문제를 접할 때, 책의 해설을 참고해서 접근하기에도 수월합니다.

특히, 카카오는 코딩 테스트의 모든 기출 문제를 프로그래머스를 통해 공개하고 있습니다.

카카오 기출 문제 모음

책에서는 2022 카카오 블라인드 코딩 테스트의 문제를 다룹니다 (13장). 카카오의 코딩 테스트는 난이도도 가장 어렵기로 유명하고, 그만큼 수준이 높다고 인정받는 편입니다. 이 문제들에 대한 해설을 앞에서 소개한 유형들과 연계하여 제공한다는 점 역시 이 책의 큰 메리트라고 생각합니다.

 

추가적으로 프로그래머스에서 운영하는 코딩 테스트 역량 시험 PCCP에 대한 소개 역시 다루고 있습니다. PCCP에 대한 소개는 생략하겠습니다. 이렇게 실전에 가까운 문제들을 책에서 함께 다루고 있다는 점은 제법 괜찮은 메리트라고 생각됩니다.

4. 제가 추천하는 책 학습 방법

책 6, 7쪽의 소개에서도 다루고 있긴 하지만, 제가 생각하는 학습 방법에 대해서 간단하게 소개해 볼까 합니다.

책의 독자는 특히 초보자라고 가정하겠습니다.

 

먼저, 책을 쭉 따라 읽으면서, 각 유형에 대해 공부해 보세요. 이 때는 완벽하게 이해하지 않아도 괜찮습니다. 예를 들어 재귀(5장)라면, 재귀라는게 뭔지, for문에 비해 어떤 장단점을 가지는지 가볍게 훑어봅니다.

다음으로, 책에서 소개하는 문제를 한번 풀어 봅니다. 아마 Level 1이라도 쉽게 풀리지는 않을 겁니다. 책에서 읽은 유형 소개를 떠올리면서, 문제와 어떻게 연관지을 수 있을지, 그것을 어떻게 코드로 옮기면 좋을지 고민해 보세요. 30분~1시간 정도 고민해 보시고, 모르겠다 싶으면 풀이를 보면서 작성한 코드와 비교해 보세요.

그러고 나면, 이제 유형에 대해 조금 더 이해가 늘었겠죠? 전략 책에서 소개하는 내용도 다시 한 번 꼼꼼히 읽어 보시고, 인터넷이나 다른 책을 통해서 조금 더 깊이 있게 공부해 보세요. 직접 문제를 마주하고 고민한 후에 다시 돌아보는 내용은, 그만큼 자세하고 깊이 있게 이해할 수 있습니다.

위 과정을 몇 번 반복해 보세요. Level 2~3 문제들도 그럴듯하게 풀 수 있는 정도가 될 때까지 반복하다 보면, 각 유형을 제법 다룰 수 있게 되었다고 할 수 있습니다.

 

위 과정을 통해 책을 한번 끝까지 읽었다면, 그 다음에는 문제를 무작위로 골라 풀어 볼 차례입니다. 이것이 꽤 중요한데, 문제 A의 유형이 B임을 알고 푸는 것과, A를 읽어 보고 B일 것이라고 유추하고 푸는 것은 하늘과 땅 차이입니다. 실전에서는 각 문제마다 어떤 유형으로 풀라고 알려 주지 않기 때문에, 유형을 유추하는 훈련 역시 되어야 합니다. 책에서 소개한 문제를 이 시점에는 전부 풀어 보셨겠지요? 각 문제를 Level별로 그룹핑 해 두시고, 레벨 내에서 무작위로 하나씩 뽑아서 다시 풀어 보세요. 알고 있다고 생각했던 문제도, 시간이 조금 지난 뒤에 어떤 유형으로 풀어야 하는지 누군가 알려주지 않은 상태에서 풀게 된다면, 생각보다 난이도가 있을 겁니다. 그렇게 풀면서 기억이 안 난다 싶으면 유형을 확인해 보고, 해당 유형을 한번 더 학습하고, 나중에 또 풀어보면 됩니다. 이렇게만 반복해도 크게 도움이 되실 거예요.

 

이 정도만 해도 제법 실력이 많이 늘겠지만, 코딩 테스트는 결국 문제를 많이 풀어보는 것이 중요합니다. 책에서 소개하는 문제 외에도 프로그래머스, BOJ 등에서 많이 찾아서 풀어 보세요. 프로그래머스 레벨 2~3, 백준 난이도 골드 정도까지 수월하게 풀 정도의 수준이 되면, 취업을 위한 코딩 테스트는 준비되었다고 할 수 있습니다.

문제를 꼭 여러 번, 많이 풀어 보세요.

5. 맺으며

리뷰를 위해 제공받게 되며 전략 책을 알게 되었지만, 읽어 보니 취업 준비생 분들에게 제법 도움이 되겠다고 느꼈습니다. C++ 판이 없는게 아쉽네요 ㅠㅠ

예전에 제가 코딩 테스트 준비 방법에 대한 글을 작성한 적이 있습니다. 예전에 작성했던 글의 맥락과, 전략 책을 소개하며 느낀 맥락이 제법 일치한다고 느꼈습니다. 코딩 테스트 준비법에 대한 접근은 많은 분들이 비슷하게 생각하시나 봅니다.

최근 신입 개발자 분들이 코딩 테스트의 난이도가 갈수록 어려워진다고 한탄하시는 것을 종종 봅니다. 코딩 테스트가 실무 개발에 직접적으로 관련이 있지는 않더라도, 코딩 테스트를 준비하는 것은 분명 개발 능력에도 도움이 되고, 취업/이직을 위한 출발선에 설 자격을 평가받기 위해 필수적입니다. 이 책을 통해 많은 분들이 코딩 테스트 준비에 도움을 받고, 어떤 방향성으로 접근해야 하는지 이해하실 수 있으면 좋겠습니다.

좋은 기회를 통해 완성도 높은 책을 리뷰하게 해 주신 길벗출판사에 감사드립니다.

 

* 본 글은 리뷰 진행을 위해 길벗출판사에서 책을 무료로 제공 받았으며, 그 외 별도의 대가는 받지 않았습니다.

'나의 생각 > 서평' 카테고리의 다른 글

개발자로 살아남기 (박종천 저, Golden Rabbit)  (0) 2022.01.17

댓글