본문 바로가기

Just Do It/소프트웨어 마에스트로

데뷔 전 개발자의 소프트웨어 마에스트로 합격기 (3) - 브론즈지만 프로 데뷔가 하고 싶어요..

▷ 자기소개서에 대한 내용은 이전 포스팅을 참고해주세요 ◁

 

데뷔 전 개발자의 소프트웨어 마에스트로 합격기 (2) - 자기소개서는 어려워.. (feat 자소서 내용

▷ 이전 포스팅도 같이 보시면 더 좋아요 ◁ 데뷔 전 개발자의 소프트웨어 마에스트로 합격기 (1) - 소마 연수생이 되고 싶었던 이유 2년 만에 블로그를 다시 시작해보려고 한다ㅎㅎ 이유는 여러

it-is-my-life.tistory.com

코딩테스트 문제는 공개할 수가 없기 때문에 문제 복기와 풀이보단 알고리즘 초보였던 내가 코테를 준비해나갔던 과정에 대해서 포스팅하려고 한다. 나같은 왕왕초보도 해냈으니 이 글을 보고있는 여러분도 해낼 수 있다!!

 

자기소개서는 완료했고 이제 남은건 코딩테스트다

코딩테스트란 무엇인가.. CS 지식과 쌍벽을 이루는 개발자 테크의 기본기아닌가..

근데 난 이전에 코딩테스트를 준비해보지도 따로 공부해보지도 않았다. 알고리즘 수업은 3-2에 있었고 프로젝트를 진행하면서 필요한 알고리즘은 따로 공부를 했지만 시험을 위한 공부는 1도 해본 적이 없었다.

나의 랭크.. 당연히 브론즈..

백준 티어는 당연히 브론즈 5였고 덧셈뺄셈 문제(1000, 1001)를 풀고 들어가는 것도 아주 가끔이었다.

코딩테스트까지 남은 기간은 2개월이고 그 시간 안에 통과할만한 실력을 만들어야 했다.

우선 마음의 안정을 위해서 참고할만한 레퍼런스가 있어야 된다고 생각했고 구글링을 해서 소마 이전 기수 선발에서 나온 코딩테스트 문제 유형과 백준 푸는 순서에 대한 자료들을 모으기 시작했다.

 

1. 소마 이전 기수 코딩테스트 문제 유형

열심히 찾아보니 대부분 공부할 유형이 보였다.

구현, 완전 탐색과 같은 쉽지만 귀찮은 문제

다이나믹 프로그래밍

BFS/DFS

유니온 파인드

대부분 이렇게 나왔었고 나 역시 여기에 맞춰서 공부하기로 했다.

 

2. SQL

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

마침 다음 학기 수업으로 데이터베이스가 있어서 예습할 겸 프로그래머스에 있는 SQL 문제를 풀기로 했다. 여러 후기들을 찾아봐도 프로그래머스 내에 있는 문제 정도면 충분히 대비가 된다고 했고 이론 공부도 따로 하지 않은 상태로 문제를 풀면서 이론 공부를 같이 진행했다.

 

3. Web

웹은 알고리즘보다도 더 문외한이었다.

전공 선택 과목에 웹을 다루는 과목이 있었던 것 같기는 한데 신청을 안 했었고 여러 강의를 찾아보다가 생활코딩에서 진행하는 웹 강의를 발견했고 그냥 강의를 듣는 정도로 공부했다.

 

 

생활코딩! HTML + CSS + 자바스크립트 | CLASS가 다르다, 엘리스 아카데미

난생 처음으로 프로그래밍을 시작하는 분들이라면 생활코딩 강의로 시작하세요!

academy.elice.io

그리고 코딩테스트를 엘리스라는 플랫폼에서 진행한다고 해서 들어가서 둘러보다가 생활코딩 내용을 실습해볼 수 있는 강의가 있어서 강의 들으면서 같이 연습했다. 덕분에 코딩테스트 볼 때 익숙한 환경이라는 느낌이 들었고 1차 때는 웹 문제를 풀 수 있었다.

 

그래서 코딩테스트 공부 어떻게 했는데요

 

처음 코딩 테스트 공부를 시작하면서 세웠던 두가지 원칙이 있었다.

1. 각 유형마다 이론 - 문제 순으로 풀어나갈 것

2. 조금씩이라도 좋으니까 매일 공부할 것

"뭐야, 쉽잖아?"라고 하실 수도 있지만 2개월 간 저 원칙들을 지켜나간다는게 생각보다 많이 어려웠다.

 

먼저 이론 공부!!

이론을 처음부터 끝까지 먼저 공부하고 문제 풀이에 들어가시는 분들도 계시지만 나는 이론 공부가 막 그렇게 재미있다고 느껴지지도 않았고 2개월이라는 짧은 시간동안 시험을 볼만한 실력을 만들어야 했기 때문에, 각 유형 별로 이론을 공부하고 관련된 문제를 푸는 식으로 공부했다.

그렇다고 무작정 백준 단계별 풀이로 가서 처음부터 풀 수는 없었기 때문에 미친듯이 구글링을 했고 그렇게 찾아낸 알고리즘 문제풀이(PS) 시작하기라는 꽤 유명한 블로그 포스팅을 나의 계획표로 삼기로 했다.

 

알고리즘 문제풀이(PS) 시작하기

이런건 고수들이나 써야 하지 않나 싶지만, 그래도 1년정도 공부하면서 이 분야를 어떻게 시작해야 할지 써보려 한다. ▶ 어떻게 공부해야할까? 나는 아직도 PS(Problem Solving)를 잘 못하지만, 주변

plzrun.tistory.com

포스팅에 들어가보면 입출력부터 브루트포스까지 알고리즘 공부 순서와 함께 백준 문제 번호가 달려있다. 4주 분량이라고 하셨지만 저거 다 푸는데 거의 6주 정도 걸린 것 같다. 중간에 가끔 들어있는 플레티넘 문제는 못 풀었다ㅎ 너무 어려워ㅎ

이론은 현재 소마 멘토님으로도 활동하고 계시는 나동빈님의 "이 것이 취업을 위한 코딩 테스트다" 책과 함께 유튜브에 무료로 제공해주시는 강의를 참고하였다. 되게 좋았던게 이코테나 강의 내에 있는 문제들이 단순히 백준 문제가 아니라 삼성이나 다른 코딩 테스트에 출제됐던 문제들이었기 때문에 백준 풀 때랑 느낌이 또 달랐다. 뭔가 신선한 느낌? 소마뿐만 아니라 기업 코테 준비하시는 분들에게도 도움이 많이 될거라고 생각한다.

 

나동빈 멘토님 멘토링 듣게되면 싸인받고 싶었는데.. 전자책으로 샀다..

 

이렇게 이론 강의 한 강 듣고 > 관련 백준 문제 풀고 > 다른 사람들의 정답보면서 내 코드랑 비교하는 과정을 2개월동안 매일 반복했다. 당연히 처음에는 안 풀리는 문제가 대다수였는데 이럴 때는 한문제 당 한시간 정도 고민해보고 정답 코드를 봤다. 한시간 이상 고민하는건 내 수준에서는 비효율적이었고 그 시간에 다른 사람의 코드보고 공부하는게 더 빠르게 실력이 향상되는 길이었던 것 같다.

 

공부하고 자기 전에 괜히 깃헙 들어가서 이거 보면서 되게 뿌듯해했던 기억이 난다ㅎㅎ

 

사실 코테를 준비하던 올해 초부터 소마 연수 초창기였던 8월 전까지 내 멘탈이 인생 최고로 깨져있는 상태였기 때문에 정신을 붙잡고 매일 한다는게 쉽지 않았다. 그래서 동기부여를 할만한 뭔가가 있어야 된다고 판단했고 깃헙에 풀었던 문제들을 커밋하기 시작했다. 또 백준 티어가 오를 때마다 날짜와 함께 기록해놨다.

이렇게 1차 코딩테스트 전까지 브론즈 5티어에서 골드 3티어를 달성할 수 있었고

드디어 대망의 1차 코테날이 다가왔다.

 

소마 수료생 창업 기업이기도 한 엘리스 플랫폼에서 코테 초대장이 왔다!!

 

메일 받으면서 정말 많이 떨었던 것 같다. 열심히 준비했고 정말 하고 싶었던 활동이었기 때문에 더 떨었다. 코딩 테스트는 앨리스라는 플랫폼을 통해서 진행되었고 부정행위 방지를 위해서 웹캠과 화면공유를 ON한 상태로 진행한다. 프로그래머스의 모니토 환경에서 전공 시험을 봤던 나에게는 익숙한 환경이었다. 특이했던 점은 개인 IDE는 사용이 가능하지만 메소드 자동 완성 기능은 OFF 상태로 진행해야 했다. 그래도 코테 때 쓰는 메소드나 라이브러리가 정해져 있기 때문에 크게 불편한 점은 아니었다.

문제는 알고리즘 6문제, SQL 1문제, WEB 1문제로 총 8문제가 나왔다.

알고리즘 문제의 난이도는 실버 3에서 골드 5정도? 대부분 구현 문제였고 BFS나 조합을 쓰는 문제가 나왔으나 전형적인 문제였고 어렵지 않게 풀었다. 파이썬으로 시험을 본 덕분에 조합 문제도 메소드 써서 금방 구현했다. 오히려 구현 문제가 시간을 많이 잡아먹었던 것 같다. 또 테스트 케이스를 1 ~ 2개 밖에 제공하지 않기 때문에(ㅜㅜ) 엣지 케이스들은 직접 추가하면서 테스트 해봐야 하는 점이 되게 어려웠던 것 같다.

SQL 문제는 프로그래머스에서 풀었던 문제 수준으로 나왔다. JOIN과 SORT를 쓰는 문제가 나왔고 어렵지 않게 풀었다. 정말 프로그래머스만 주구장창 풀면 풀 수 있는 수준 정도의 문제가 나온다.

WEB 문제는 JS는 다루지 않고 CSS 단에서 체크박스와 색 변경을 섞어 놓은 문제가 나왔다. 알고리즘을 꽤 빨리 풀어서 시간이 남았기 때문에 WEB에 시간을 많이 투자했고 어렵게 풀긴 풀었다. 근데 생활코딩 강의를 듣고 실습하는 것만으로는 풀기 쉽지 않은 느낌이다. 나도 정말 다행이게도 공부하다가 주워들은 지식으로 풀었다. 나중에 듣기로는 WEB 문제 배점이 정말 크다고 하니 WEB에 자신있으신 분들이나 알고리즘에 자신없으신 분들은 WEB 공부를 많이 하는 것도 전략인 것 같다.

이렇게 알고리즘 4문제, SQL 1문제, WEB 1문제까지 해서 총 6문제를 풀었고 코딩테스트 1차에 합격했다.

 

내 인생의 첫 코딩테스트 합격이당 :)

 

붙고 정말 기뻤다. 원래 성격 상 무슨 일이 있어도 잘 들뜨지 않는 편인데 뭔가 오롯이 나의 노력으로 합격이라는 좋은 결과를 얻어낸 것 같아서 정말 뿌듯했다.

하지만 나에게는 2차 코딩 테스트가 있었다.

 

2차 코딩테스트 메일과 함께 날아온 안내 노션 페이지

 

사실 1차 코딩 테스트는 문제가 8개였기 때문에 하나를 풀지 못해도 다른 문제를 풀면 된다는 자신감이 있었다. 하지만 2차 코딩 테스트는 알고리즘 3문제, SQL 1문제, WEB 1문제로 총 5문제 밖에 나오지 않아서 많이 불안했던 것 같다. 그래서 1차 붙고 2차 보기까지의 기간 동안 알고리즘 공부를 정말 많이 했다.

알고리즘 문제의 난이도는 1차보다 어려워진 실버 2 ~ 골드 3 정도의 난이도였다. 물론 1문제가 플레티넘급으로 어렵게 나왔고 문제를 처음 보자마자 "아 이건 못 풀겠다"하고 넘어갔다. 브루트포스 문제는 아이디어 자체는 어렵지 않았고 빨리 풀었지만 엣지 케이스에 대한 예외처리를 잘 못해서 틀렸다. 나머지 한 문제는 전형적인 Union Find 문제에 약간의 조건이 추가된 문제였는데 Union Find를 좋아해서 준비 과정에서 많은 문제를 풀었기 때문에 나름 어렵지 않게 재밌게 풀었다.

SQL은 테이블 3개를 JOIN해서 푸는 문제였다. 나름 잘 풀었다고 생각했는데 끝나고 나서 잘못 풀었다는걸 깨달았다. DATEDIFF() 메소드를 써줬어야 했는데 그냥 빼기로 날짜를 빼버렸다. 어쩐지 결과값이 이상하게 나오더라니.. :( 아쉽다하고 잊고 있었는데 면접에서 내 풀이에 대한 질문이 나와서 굉장히 당황을 했다. 자세한 내용은 다음 포스팅에서..ㅎㅎ (다음 포스팅도 봐달란 소리)

WEB은 JS로 정렬, 조회를 하는 문제였는데 약간 풀다가 놔뒀다. 부분 점수가 있다면 아마 조금 받지 않았을까 싶다.

알고리즘과 SQL에서 했던 실수때문에 최종적으로는 1솔 + 부분점수일 것 같다. 사실 떨어졌다고 생각하고 결과 나올 때까지 내 실수들이 생각나서 굉장히 괴로웠는데 합격해서 너무 다행이다 울룰룰루

코딩테스트 합격!! 이제 면접이다!!

이렇게 길다면 길고 짧다면 짧은 2개월 간의 준비 끝에 너무 감사하게도 가장 자신없었던 관문인 코딩 테스트를 통과할 수 있었다. 소마가 하고 싶지만 코테 볼 자신이 없어서 지원을 망설이고 있는 누군가에게 내 포스팅이 조금이나마 도움이 됐으면 좋겠다 :)

다음 포스팅은 면접 준비 과정과 면접 내용을 다룰 예정이다. 12기 선발 과정에는 없던 포트폴리오 발표가 추가되어 많이 당황했지만 그래도 여러 방면에서 많이 배울 수 있었던 면접 경험이니만큼 최대한 자세히 포스팅할 예정이니 관심 많이 가져주시길!! 궁금한 점은 언제든지 댓글로 남겨주시면 열심히 답변드리도록 하겠다!! 그럼 다음 포스팅에서 다시 만나요ㅎㅎ