*책의 내용을 다시 되새기고자 간단히 리뷰하였으며, 파이썬 알고리즘 인터뷰 책을 제가 이해한대로 요약했습니다. 감사합니다 *

1장 - 코딩인터뷰

코딩 인터뷰란?

코딩 인터뷰란 기술직군 채용을 위한 기술 문제 중심의 개발 인터뷰를 뜻합니다.
일반적으로는, 오프라인 면접장에서 화이트보드를 이용해 후보자의 기술 지식, 코딩 능력, 문제 해결 역량, 창의성 등을 테스트하는데, 최근 대부분 IT기업들은 온라인에서 많이 보는 추세입니다.
그러면서 코딩 인터뷰 보단, 코딩 테스트 라는 용어를 많이 씁니다. 코딩 인터뷰는 '코딩 면접', 코딩 테스트는 '코딩 시험'의 차이가 있습니다.
이 책에서는 테스트 플랫폼을 이용한 '온라인 코딩 테스트'에 좀 더 집중해서 설명해줍니다.

코딩 인터뷰를 위한 온라인 테스트 플랫폼

국내외에 이미 다양한 테스트 플랫폼이 존재합니다. 해외는 예부터 코딩 테스트를 치뤄왔기에 좋은 플랫폼들이 여러 존재한다고 하네요😀 국내 회사에서 주로 사용하는 플랫폼은 크게 4개 정도 꼽을 수 있다고 합니다.

주의할 점이 있다면 각 사이트마다 다른 방식으로 동작하고, 기업마다 합격 기준이 다르기 때문에, 스스로 코드 디버깅을 하며 신중하게 풀이를 제출하는 것이 중요합니다!😠
각 사이트마다 테스트 케이스를 주는 곳도 있고, 아닌곳도 있는 것처럼 다른 부분들이 많으니 만약 코딩테스트를 보게 되신다면 각 플랫폼의 특징을 파악하는 것도 중요한 부분 중 하나입니다.😮

번외로 문제풀이를 위한 사이트들도 존재합니다. 가령 국내는 백준이 잘 알려져 있고, 책에서는 리트코드, 해커랭크(개인을 위한 문제 풀이 서비스도 제공합니다!) 를 추천해주네요.

온라인 코딩 테스트의 사전 준비사항, 주의 사항

1. 연습장과 필기도구

  • 굳이 없어도 되지만, 연습장과 펜이 있다면 머리로 고민해서 쉽게 풀리지 않는 구조들을 써내려가면서 많은 도움을 받을 수 있다고 해요! 값의 변화나 최종 결과를 기록하면서 머릿속 구조와 비교해보면 더 정확하게 풀 수 있는 좋은 습관을 기를 수 있겠네요 👍

2. 자신만의 코드 스니펫 준비

  • 코딩 테스트시 자주 쓰이는 동작들에 대해 코드 스니펫을 미리 만들어두면 도움이 된다고 하네요. 갑자기 구현하려고 하면 헷갈리거나 시간 소요가 제법 있는 작업들은, 사전에 만들어 두면 많은 도움이 될 것 같습니다.
  • 관리하기 좋은 사이트로는 '깃허브 기스트'라는 무료 서비스를 사용해도 좋을 것 같아요. 물론 자신이 직접 연습하고 풀어보면서 만들어야 나중에 스니펫을 사용할때도 제대로 이해하고 바르게 적용할 수 있겠죠?!😉
    -깃허브 기스트(https://gist.github.com/)

3. 모든 테스트 케이스를 통과하도록 풀어야합니다.

  • 테스트 케이스(Test Case)란 특정한 테스트 목표를 달성하기 위해 실행되는 입력, 실행 조건, 테스트 절차, 기대 결과 등의 스펙을 말해요. 코딩 테스트의 주요 특징 중 하나가 모든 테스트 케이스를 통과해야 한다는 점이란걸 알아야 합니다..!
  • 보통 문제당 수십개의 테스트 케이스가 존재하고, 입력 값의 크기도 수천개에 달해서, 효율적으로 풀이해야 하고, 만약 그렇지 않다면 타임 아웃같은 문제가 발생하게 됩니다!!
    게다가 기업마다 제출 횟수를 평가를 평가 기준으로 삼는 경우도 있으니(꼭 확인해 보셔야 합니다), 무지성 제출을 하시다간 감점을 당할 수 있습니다..(물론 계속 테스트를 해봐야 어디가 문제인지 확인할 수 있지만, 기업의 선택이니 어쩔 수 없습니다 ㅠㅠ...😢)
    그러니 코딩 테스트를 볼 때는 충분히 생각하고, 문제가 없는 지 확인 한 후 제출하는 편이 좋겠네요!!

4. 타임아웃이 발생하는 경우

  • 3번에서 설명했듯이, 테스트 케이스 중 입력값이 엄청나게 큰(수천,수억등)를 입력해서 시간 복잡도가 O(n²)인 알고리즘들을 타임아웃 시키려는 것들도 존재합니다..! 그러니 시간 복잡도가 최대 O(n), 최소 O(n log n) 정도까지 최적화 시킬수만 있다면 하시는 것도 좋습니다.
  • 언어별로 타임아웃이 다른데, 특히 Python의 경우엔 너무 빡빡해서 C++이나 Java에선 통과가 되는데 Python은 안되는 경우도 있다고 합니다 🙄...억울한 일이겠지만 Python 개발자 분들은 알고리즘 최적화에 대해 더 많은 고민이 필요할 것 같아요..

5. 예외 처리를 잊지 말자

  • 입력값이 null이나 0이 들어오는 경우가 있어요; 입력값에 대한 검증 과정을 하지 않았다면 분명 에러가 발생합니다!! 확인할 수 있다면 좋겠지만, 애초에 테스트도 안돌려주는 테스트 플랫폼들이 존재하니 처음부터 예외 처리를 잘하는게 중요할 것 같습니다!!

6. 잘못 접근한 풀이, 어떻게대처할까? + 풀이시간을 초과했을 때, 포기해야할까?

  • 문제를 풀 때 BFS 방식으로 가능한 줄 알고 풀다가, 결국에 DFS 방식이 옳다는 것을 알았을 때, 이미 시간이 많이 지났거나 잘못된 접근 방식으로 풀이가 아예 달라져버렸을 경우 굉장히 난감한 상황이 옵니다..이런 일이 발생하지 않도록 문제당 제한 시간을 정해 놓는게 중요하다고 봐요!
    문제를 풀이할때도 너무 장시간 고민하는 것보단, 30분~1시간 정도 고민해보고 안되면 풀이를 참고하고, 그 풀이를 이해하고 자신의 것을 만들어 보는 것처럼 실전에서도 시간 제한을 두는게 좋다고 하네요.
  • 최선을 다해 풀었지만 시간이 모자라거나, 아쉽게도 다 풀지 못했다면...만약 조금의 시간이 더 있다면 풀 수 있거나, 면접관의 이메일 주소를 알고 있다면 계속 풀이를 시도해 메일로 보내보는게 좋다고 합니다! 경진대회 같은 것이 아니다보니 시간을 빡빡하게 주진 않는다곤 하지만, 혹시 모를 일이죠. 어쨋든 위의 2가지에 해당된다면 포기하지 말 것!!

7. REPL 도구로 코드를 검증하자

  • REPL은 사용자가 입력한 프로그램을 읽고 값을 계산한 다음 출력하는 일을 반복하는 구조를 뜻하는 read-ecal-print loop의 약자입니다. 사용자 입력에 대한 실행 결과를 바로 되돌려준다고 하네요. 모호한 알고리즘을 바로 검증해보며 버그를 줄이면 많은 도움이 되겠네요 😁

2장. 프로그래밍 언어 선택

언어 선택이 중요한 이유

  • 대부분의 회사에서 온라인 코딩 테스트 시 개발 언어는 자유롭게 선택이 가능합니다. 하지만,
    이 책에서는 아래의 내용에 의해 Python이 가장 코딩 테스트에 적합하다고 설명합니다.
  1. 면접관이 쉽게 이해할 수 있느냐(그 언어에 익숙하지 않다면)
  2. 코딩 플랫폼에서 지원하는가?(보편성)
  3. 유연한 언어인가?(엄격한지)
  4. 언어 레벨에서 풍부한 기능을 지원하는가?(편리성)

1. 면접관이 쉽게 이해할 수 있느냐

  • 아무리 코딩 능력이 뛰어나도 개성 같은 언어를 만나면 면접관을 설득하는게 쉽지 않습니다. 여러 언어가 있지만, 그 중에서도 파이썬은 익숙치 않더라도 간단한 문법만 알면 금방 이해할 수 있습니다.

2. 코딩 플랫폼에서 지원하는가?

  • C++와 Java가 가장 유리한 항목이기도 한데, Python도 거의 모든 플랫폼에서 제공됩니다.

3. 유연한 언어인가?

  • C++와 Java는 대표적인 정적 타이핑 언어로, 엄격한 기준이 있습니다. 물론 이를 통해 대규모 프로젝트에서는 유지 보수, 가독성면에서 우월합니다. 하지만 빠르게 알고리즘을 구현해야하는 코딩 테스트에서는 알고리즘에만 집중해 빠르게 개발할 수 있는 Python이 타 언어에 비해 압도적으로 유리한 지점이입니다.

4. 언어 레벨에서 풍부한 기능을 지원하는가?

  • 코딩 테스트와 현업의 가장 큰 차이점은, 외부 라이브러리를 전혀 사용할 수 없다는 점입니다! 언어 레벨에서 기능을 지원하지 않는다면, 모든 것을 자신이 직접 구현해야 합니다..😅
    현업에서는 그런 경우가 많지 않습니다. C++의 경우는 STL이 표준 라이브러리이기 때문에 마음껏 활용할 수 있지만, C의 경우엔 아무런 라이브러리도 사용할 수 없기 때문에 직접 구현해야 하죠.
  • Python도 이미 언어 레벨에서 풍부한 기능을 내장하고 있기 때문에, 타 언어에 비해 압도적으로 유리합니다. 책에서는 '치트 키'라고 언급했을 정도의 기능을 제공한다고 하네요. -> 이 때문에 일부 기업은 파이썬 코딩 테스트를 제한하기도??;
profile
하하

0개의 댓글