[커리어] 코딩 테스트 포기하지 않을 효율적인 3단계 공부법

삼성SDS, 쿠팡을 거쳐 현재는 포티투닷에서 백엔드 서버 개발 업무를 맡고 있는 7년 차 개발자이자 《코딩 테스트 합격자 되기: 자바 편》의 저자 김희성입니다. 효율성, 가독성, 유지보수성 측면에서 더 좋은 코드를 작성하기 위한 고민과 토론하길 즐깁니다.

 

삼성SDS에 재직하면서 1년 6개월 정도 코딩 테스트 코치로 활동했습니다. 주로 삼성 SW 역량 테스트 A형, B형에 대한 강의 업무를 수행했고, 연습 문제 출제나 기출 문제 검수도 병행했죠.

 

사내 강사 평가에서 가장 높은 점수를 받은 강사였습니다. 코딩 테스트를 어려워하는 분들 입장에서 알고리즘을 이해하기 쉽게 설명하고, 코드마다 꼼꼼히 주석을 추가한 노력을 알아주셔서 사내 게시판에도 후기가 올라올 만큼 좋은 평가를 받았었죠. 수강하신 많은 분을 직접 만나면서 적절한 자료구조를 선택하는 방법, 시간 복잡도 계산이 필요한 이유, 코딩 테스트 공부를 효율적으로 하는 방법 등 여러 측면에서 이해하기 가장 쉬운 방법을 매번 고민했고, 체계적인 커리큘럼을 구성하고자 깊게 파고든 것이 결과적으로 회사와 임직원 모두에게 긍정적인 강의로 이어질 수 있지 않았나 싶습니다.

 

그러다 더 많은 분께 쉬운 자료구조/알고리즘 설명과 코딩 테스트 노하우를 알려드리고 싶다는 마음으로 《코딩 테스트 합격자 되기: 자바 편》이라는 책도 쓰게 되었습니다.

 

저도 대학교 졸업 후 처음 코딩 테스트를 준비할 때 앞이 막막할 만큼 어려웠던 경험이 있습니다. 그런데 코치 활동 때 만난 많은 분이 저와 똑같은 어려움을 말씀하시더라고요. 코딩 테스트가 실무와의 연관성이 떨어진다고 말하는 건 어느정도 맞는 말일 수 있습니다. 그러나 회사가 원하는 인재상의 허들로서 코딩 테스트가 존재한다면 합격과 취업이라는 목표에 도달하는 것이 코딩 테스트를 공부하는 목적이 되어야 합니다.

 

문제는 많은 분이 비효율적인 코딩 테스트 공부에 지쳐서 “실무와 관계도 없는데, 왜 배워야 하지?”, “비합리적인 수험 문화에 동의할 수 없어.”, “코딩 테스트 없이 날 진정으로 알아주는 회사로 갈거야.”처럼 처음 목표와 목적을 벗어나 포기하시는 분이 많다는 겁니다. 분명 이 허들만 넘으면 더 큰 날개를 펼칠 수 있는 데도 말이죠.

 

그래서 제대로 배우면서 가장 효율적인 루트를 공유하고 싶었습니다. 합격이라는 목표에 꼭 필요한 내용만 배워도 공부 분량에 대한 부담을 줄일 수 있도록 말이죠. 책을 집필할 때도 글만으로 이해하기 어려운 부분은 그림을 추가했고, 코치 때 커리큘럼을 반영해서 최대한 이해하기 쉽게, 복잡한 문법을 사용한 화려한 코드는 지양하고 초보자도 깨닫기에 수월한 코드로 작성했습니다.

 

그리고 책과 더불어 코딩 테스트를 준비하는 데에 도움될 노하우를 3단계로 설명드리고자 합니다. 단기간 준비한 코딩 테스트는 반드시 실패합니다. 꾸준히 코드를 작성하고, 원하는 로직을 정확한 코드로 옮기는 연습을 반복해야 합니다.

 

__1단계
주 언어를 선택하여 구현 연습에 초점을 두어야 하는 시기입니다. 알고리즘 공부부터 들어가시는 분도 계시는데, 좋은 방법은 아닙니다.

가장 자신있는 언어를 주 언어로 선택하고, 만약 자신있는 언어가 없다면 여타 언어보다 러닝커브가 낮고, 고민할 부분이 덜한 파이썬(Python)을 추천합니다. 코딩 테스트에서는 복잡한 문법이 필요하지 않으니 언어 선택에 많은 시간을 쓰기보단 본인이 사용하기 편한 언어로 준비하는 것이 좋습니다.

코딩테스트 연습 사이트인 프로그래머스 기준 레벨 0-1의 문제를 많이 풀어보면서 직관적으로 떠오르는 풀이 방식을 코드로 옮기는 연습을 반복하세요. 효율성을 고민하기 보다는 머릿속으로 생각한 풀이 방식을 코드로 작성해 보는 것이 가장 중요합니다.

 

__2단계
자료구조와 효율성에 대해서 본격적인 고민이 필요합니다. 프로그래머스 기준 레벨 1-2의 자료구조 특성을 이용해서 풀 수 있는데 문제들을 경험해야 하죠. 자료구조가 동작하는 방식과 연산마다 다른 효율성을 공부하고, 적용한 문제를 풀면서 자료구조 사용에 익숙해져야 합니다. 똑같은 문제를 서로 다른 자료구조로 해결할 수 있다면 자료구조 이해에 도움 될 것입니다.

다소 복잡한 구현도 익수해져야 하고, 이때부터는 팬과 노트를 옆에 두고 문제 풀이 로직을 그림이나 글로 작성해서 예외 케이스는 없는지, 답을 도출하기까지 논리적인 오류가 없는지 검증 후 코드를 작성하는 연습이 필요합니다.

 

__3단계
DFS/BFS 와 같은 탐색 알고리즘 또는 Dynamic Programming 와 같은 코딩 테스트 빈출 알고리즘을 학습해야 합니다. 프로그래머스 기준 레벨 2-3 이상 문제 기준 최소 30분 정도는 풀이 방법을 고민하고, 풀이 방법이 논리적으로 정확한지 검증하는 데에 시간을 써야 합니다. 코드 작성 전 머리로 생각한 로직이 시간 초과가 발생하지 않을지 미리 시간 복잡도를 계산하는 것도 연습해야 합니다.

정확성 테스트와 효율성 테스트에 각각 점수가 있더라도 정확성 테스트만 통과하는 건 배점이 높지 않습니다. 효율성 테스트를 통과해야 높은 점수를 받을 수 있으므로 대부분 수행 시간을 효율성에 투자하고, 풀이 로직을 고민할 때부터 시간복잡도를 고려해서 제한 시간 내 수행되는 로직을 생각해야 합니다.

2~3시간 정도 풀이해도 문제를 풀 수 없다면 다른 사람의 코드를 참고하는 것도 좋습니다. 다만, 다른 사람의 풀이를 볼 때는 꼭 본인 스타일의 코드를 작성해 보고 차이가 무엇인지, 왜 정답 코드인지 고민하는 시간을 가져야 합니다. 또한, 본인이 문제를 풀지 못한 이유도 확인할 필요가 있습니다. 문제에 접근하는 아이디어를 떠올리지 못한 것이라면 ‘이런 유형은 이렇게 풀 수 있구나.’라고 기억해 두고, 실제 코딩 테스트에서 유사한 문제가 나올 때 비슷한 방식으로 접근하시는 게 좋습니다. 반대로 아이디어는 생각했으나 구현에 어려움이 있다면 자신의 스타일로 작성한 정답 코드를 여러 번 반복해서 어려웠던 부분만 그림 또는 짧은 글로 노트에 정리해 보시기 바랍니다.

 

이처럼 초반부터 후반까지 긴 호흡으로 충분한 시간을 투자하면 대부분 기업의 입사 코딩 테스트는 큰 어려운 없이 합격하실 수 있을 겁니다.

 

두 가지만 강조하겠습니다.

 

첫 번째, 짧은 코드에 현혹되지 않으셨으면 좋겠습니다. 문제를 풀 때 코드가 짧은 것보다는 효율성이 우선이고, 의미가 명확한 것이 가장 중요합니다. 코드가 짧다고 효율적인 것도, 길수록 의미가 명확해지는 건 아닙니다. 같은 로직에 코드가 전달하는 의미를 명확히 하면서 코드가 짧아지는 건 좋지만, 무의미하게 짧은 코드는 바람직하지 않습니다.

 

두 번째, 쉽게 포기하지 않으셨으면 좋겠습니다. 저도 첫 취업 준비 때 대부분 기업에서 코딩 테스트에 불합격했습니다. 거대한 벽을 느꼈죠. 하지만 시간이 있을 때 조금씩이라도 구현 실력을 키웠고, 결과적으로 SW 역량 테스트에 합격할 수 있었습니다. 꾸준히 하면 알고리즘 대회 입상은 어려워도 기업 입사 코딩 테스트 합격은 누구나 가능하다고 생각합니다. 당장 힘들더라도 벽을 넘는 순간부터 배움의 시간이 아깝지 않는 성장 속도와 커리어 패스를 밟을 수 있으니 끈기있게 도전해 보시길 바랍니다.

프로그래머스 코딩테스트
언어별 완전 정복하기

 

코딩 테스트 합격자 되기 바로가기

저자 김희성

현 42dot 백엔드 개발자. 이전에는 삼성SDS에서 소프트웨어 개발자, 쿠팡에서 풀스택 개발자로 근무했다. 특히 삼성SDS 시절에는 사내 SW역량테스트 강사로 활약했다. 귀찮은 거 싫어하고 집에서 자는 게 가장 좋은 백엔드 개발자다. 어려운 문제와 맞닥뜨렸을 때 더욱 불타오르는 타입. 새벽 시간에 코드짜는 걸 좋아하며 주말에 밤새 코딩하는 일을 즐기는 ESTJ.

Leave a Reply

©2020 GoldenRabbit. All rights reserved.
상호명 : 골든래빗 주식회사
(04051) 서울특별시 마포구 양화로 186, 5층 512호, 514호 (동교동, LC타워)
TEL : 0505-398-0505 / FAX : 0505-537-0505
대표이사 : 최현우
사업자등록번호 : 475-87-01581
통신판매업신고 : 2023-서울마포-2391호
master@goldenrabbit.co.kr
개인정보처리방침
배송/반품/환불/교환 안내