[우테코 6기 최종] 울면서 쓰는 비전공자 독학러의 최종 코딩테스트 회고

별의개발자커비·2023년 12월 24일
12

우테코 도전기

목록 보기
36/37

프리코스 그 후...

뒤 없이 몰입했던 4주의 프리코스가 끝난 후, 난 1차는 합격일거야! 그럼!! ...그러겠지?의 생각으로 하루 이틀 간의 휴식 후 바로 최종 코딩테스트 준비에 들어갔다.

1. 최종 대비 스터디

매주 일요일마다 실제 최종 코딩테스트처럼 1시부터 6시까지 그동안의 기출 문제들을 풀어보고 리뷰하는 스터디를 참여했는데 정~말 도움이 많이 됐다.
내 고질적인 문제인 너무 긴 설계 시간을 알게된 것도 이 스터디 덕분이었다.
감사한 한 명 한 명 내 스터디원 선생님들🥹

2. 만능틀 제작

최대한 시간을 줄일 수 있는 부분을 찾다보니 1. 템플릿과 2. quick 참고 문서를 만들기 시작했다.

1. 템플릿

2. quick 참고 문서

혹시 다음 기수에 최종 코테를 준비하는 분들 중에 참고하고 싶은 분이 있을 수도 있으니..!

최종 코테 준비 문서: https://github.com/skylar1220/wootech-final-test-study

3. 준비하면서 알게된 나의 약점

그렇게 준비하는 과정에서 나를 가장 괴롭힌건, 바로 설계 시간이었다.
5시간의 시간 중 나는 기본 1시간 반에서 길면 2시간을 설계에 쓰곤했다. 그러다보니 5시간이 택도 없기 일쑤였다.

1주일이 주어지는 프리코스 때야 객체 간의 관계와 책임을 잘 분리해놓은 설계를 긴 시간을 들여 짜는 것이 도움이 되었을지도 모르지만 5시간이라는 시간 제한에 있어서는 매우 큰 약점이 되었던 것이다.

4. 매일 매일 타임어택

그래. 안되면 무식하게 가자.라고 짧게 생각하고 2주쯤 남았을 때 부터는 매일 매일 5시간을 재면서 있는 문제를 하나씩 풀기 시작했다.

무식한 방법인만큼 매일 시험보는 기분이고, 기운이 쏙쏙 빨리는 매일 매일이었지만,
덕분에 조금은 기계적(?)으로 설계하게 되면서
이전에 2시간 걸렸던 게 1시간 반 걸리는 형식으로 설계에 조금은 능숙해질 수 있었다!

1차 합격

그렇게 최종 준비에 정신이 없을 무렵, 드디어 1차 발표날이 다가왔다.

발표에 상관없이 매일 하던대로 덤덤히 공부를 했다.
를 원했지만, 무슨-
난 1차는 합격일거야! 그럼!!이라고 외쳤던 패기는 어디가고
2시부터 프리코스 디스코드와 메일함을 1분에 한 번씩 전환해가면서 호달달 떨기 시작했다.😇

대망의 3시!
아마 내 커맨드+R키가 이때 꽤나 닳았을 것이다.
아무리 새로고침을 해도 메일이 안옴에 따라 다리를 떨어가고...
그렇게 3시 1분이 되어 새로고침을 하니!

드디어 왔다. 1차 결과 메일.

사실 미리보기에 이렇게 스포가 있었어서 들어가지 않고도 입틀막을 할 수 있었다.

이 문구를 얼마나 기다렸던가🥲

최종 코딩테스트 직전 (딴소리니 넘기셔도 됩니다ㅎ)

부담감에 미쳐버린 몸

1차 발표 이후 갑자기 목이 붓기 시작했다. 몇 일 컨디션 조절하면 되겠지 했는데,
결국 최종 전날 6시까지 마지막 기출 문제를 다 풀고나니 느껴졌다.
오... 이거 꽤나 많이 부었는데..? 아픈데..?
내일 컨디션을 장담할 수 없어서 결국 엄마 찬스를 써 저녁 6시에 문 연 병원을 찾아 가게되었다.

나: 감기인지 독감인지 목이 너무 아파요ㅠㅠ
의사쌤: 음... 목에 염증 같은 건 전혀 없고요~ 심리적인 것 때문에 역류성 식도염이 생겨서 부은 거네요~
나: ???

매우 머쓱하게 독감은 무슨, 감기조차 아니었고 심리적인 부담으로 식도염이 생겨서 목이 부었던 것이었다😂
최선을 다해 준비했으니 긴장하지 않을 거라고 생각했는데 몸은 알아챘나보다.
독감 같은 게 아니었으니 뭐 다행이다 싶으면서, 그렇게 머쓱하게 약을 타고 집에 왔다는 사실~
맘을 놓고 집에와서 10시부터 누워서 잠을 청했으나 2시에 잠에 든 것을 보면 부담감, 긴장이 엄청났긴 했던 것 같다.

샤라웃 투 엄마아빠

시험 당일, 지방 of 지방인 이곳이었지만, 엄마 아빠가 마침 경기도에 갈 일이 있어서 평택터미널까지만 태워다주기로 했다.

그리고 시험볼 때 밥은 뜨뜻하게 잘 챙겨먹어야한다고,
밥, 국, 반찬 도시락을 싸서 차에서 점심을 먹을 수 있게 해준 우리 엄마 아빠...
(나 수능 때도 이렇게는 안했다..ㅎㅎ)
샤라웃 투 엄마아빠 꺄울🙏

우와 우테코 캠퍼스다...

그렇게 1시 시험이었지만 부지런 떤 덕인지 딱 12시에 선릉 캠퍼스에 도착하게되었다.
일찍 도착했다고 생각했지만 이미 도착한 분들이 줄지어 입장하고 있었다.

다들 똑같은 마음이구나 라는 생각을 하며, 모두가 찍는다는 그 로고! 나도 찍었다!

그렇게 해서 입장하니 우테코 브이로그에서만 보던 그 캠퍼스가 눈 앞에 있었다.
우-와아아아아아아하고 설레기 시작!

그러다 신분증 검사를 하면서 입학설명회 영상에서 뵈었던 워니 코치님이
곧 생일이네요? 생일 축하해요!라고 해주셔서
앗 엇 으앗 네 맞아요 감사합니다! 하고 이상한 소리를 내며 들어오게되었다ㅎㅎ

선릉에는 위의 사진의 왼쪽 남색 큰 강의실과 오른쪽의 연두색? 작은 강의실이 있었는데 나는 오른쪽 강의실로 안내 받았고 들어갔을 때 보였던 건, 이렇게 다 노트북을 피고 열심히 세팅 중이던 다른 참가자 분들이셨다.

뭔가 다들 잘하실 것 같고... 조구만 비전공자 독학러가... 여기 껴도 되나...하는 주눅든 생각이 잠시 들었지만, 금방 휘휘 떨쳐버리고 맨 앞에 자리를 잡았다!

나도 세팅을 다 마치고 했는데, 시작 전 약간 이슈가 있어보였다!
안내되어있는대로 와이파이를 연결했지만 나 뿐만 아니라 다른 분들도 연결이 안되는 것 같아보였고,
결국 해당 이슈로 시험 시작을 30분 연기한다는 공지가 내려왔다.

오잉 이런 일이? 싶었지만 알아서 잘 해결해주시겠지~ 하는 마음으로 입구에서 나눠주신 기념품을 뒤적뒤적하며,

또 밖에 기웃 기웃 돌아다녀도 보면서 긴장을 풀어보았다.
돌아다니다 발견한 문구인데, 한줄 한줄이 다 마음에 남는 내용이라 찰칵.

최종 코딩테스트 시작

시작 전에 저장소는 비공개였지만 저장소 링크 자체에 이름이 oncall이라고 되어있어서 찾아보니 비상근무 로테이션? 그런 것 같아서, 이게 뭐지 싶으면서 여러 상상을 했던 것 같다.
그리고 드디어 1시 반, 저장소가 공개되었다.

알고리즘인건가? 뭐지? 어려운데...?

문제를 보고 들었던 생각은

  1. 날짜를 이용해야하네
  2. 알고리즘 코딩테스트 느낌인데? 근데 난 알고리즘 문제 풀어본 적이 별로 없는데...
  3. 다음 인덱스에 영향을 주는 스위칭 형식... 단순하지 않은데...?
  4. 미션 해결 전략 문항? 이건 또 뭐지...?

역대급 설계 시간😇

전년도 5기 메뉴 추천 프로그램에 비했을 때 훨씬 복잡하다고 느껴졌고,
순간 덜컥 초조함 내지는 불안함이 들었던 것 같다.

따라서, 바로 목표 설정이 되었던 것 같다.
그래 문제를 제대로 이해하고 기능 구현을 정확하게 해내는 것, 그것까지를 일단 목표로 해야겠구나

그렇게 시간을 들여 천천히 문제를 이해해보고, 노트를 펼쳐 설계를 하기 시작했는데 몇 가지 문제가 있었다.

1. 날짜를 이용해야하는데 만년이라 LocalDate를 쓸 수 없다.

내가 아는 날짜 관련 클래스는 LocalDate 밖에 없었다.
하지만 LocalDate는 년도까지 지정을 해야하는 클래스고 요구사항은 만년이라 사용할 수 없었다.
각 달의 하루하루 일을 주중, 주말로 구분해서 저장해놓는 과정을 내가 아는 자바 API 내에서 처리할 수 없다.

→ 각 달의 하루하루 일을 주중, 주말로 구분하여 저장하는 EmergencyMonth를 반복문과 조건문을 활용하여 직접 구현하기로 했다. (1차 시간 지연)

2. 연속 근무일 때 빼준 근무자를 어떻게 저장했다가 다시 다음 차례 때 넣어주지?

뭔가 que였나 그런 걸 예전에 알고리즘 문제 풀 때 썼던 것 같지만, 몇 달 전에 몇 개 풀어본 그걸 적용하기엔 기억도 가물가물했기 때문에 잘 모르는 방법은 PASS 였고,
반복문 내에서 조건문으로 어떻게든 해봐야겠다. 싶었다.

어찌저찌해서 위의 방향으로 설계를 마치니 2시간 10분이 지나있었다.
그렇다. 예상보다 설계를 너무 오래하게 된 것이다.
사실 설계를 하면서도 시간이 점점 지남에 따라, 아 이 정도만 해놓고 일단 쳐야하나? 하는 생각이 들었지만,
요구사항 중에 지나치기 쉬운 것들이 꽤 있어서 그냥 구현했다가는 돌아는가는데 허점이 많은 코드가 될 것 같다는 생각이 강하게 들었고, 뚝심인지 무식한건지 끝까지 설계를 했다.

그러다보니 메인 로직인 이 '스위칭' 기능을 구현하기 시작했던 건 1시간반쯤 남았을 때였다.
경험상 1시간은 남기고 디버깅을 해야 중간에 발견한 오류를 수정할 수 있기에,
그렇다면 30분 안에 메인 로직을 완성하고 프로그램을 돌리기 시작해야했던 것.

1시간 남기고 머릿속에서 지워진 클린코드

이 때부터 시작되었다. 노클린코드♻️

이건 내가 만든 가장 메인로직인 EmergencyScheduler의 메서드이다.
가장 창피한 부분을 여기 이렇게 기록하고 싶었다.
15라인은 무슨 몇십라인이 넘어가는 메서드에 중복제거는 당연히 하지 못했다.
그저 일단 돌아가게 만들었다.

이외에 골치를 썩였던 평일인데 공휴일인 경우 등도 최대한 객체의 상태를 변경하는 쪽으로 해결하려고 하면서 코드를 작성해보았는데, 이게 객체 간의 책임이나 역할을 충분히 생각할 시간 없이 객체 상태 변경을 적용하려다보니 인스턴스 변수가 점점 늘어나는 문제가 생기기도 했다.

그래도 일단 구현이다. 싶었고, 인스턴스 변수가 4개가 넘어가는 클래스도 있었으나 위와 같이 일단 돌아가게 쳤다.

도..돌아간다!

그렇게 구현을 마치고 테스트를 돌리니... 통과! 돌아갔다!

하지만 제공되어있는 ApplicationTest 통과가 모든 요구사항 충족을 의미하지는 않는다.
따라서 제공되어있는 입,출력 예시와 다른 요구사항을 빠뜨리지 않고 충족하기 위해서
디버깅을 돌리며 코드를 추가, 수정하는 과정을 진행했고,
종료 10분 전에 (그 때 당시 생각하기에) 모든 기능 요구사항과 출력 예시를 충족하게 완성을 했다.

10분이 남았지만 pr을 날리고, 소감문을 제출하고 예제 테스트를 실행하고보니 코드에 손을 대기 겁나는 시간이 남았고,
메서드 분리나 상수화와 같은 리팩토링을 하지는 못하고,
5분만 더 있었어도.. 하는 마음과 함께 제출하게 되었다.

최종 코딩테스트 그 후

다시 들춰보기 싫지만 꾸역꾸역 리뷰 요청하기

시험이 끝나고, 두가지 마음이 함께 들어 시원섭섭했던 것 같다.

  1. 프리코스 동안 열심히 연습했던 메서드 분리나 상수화 등의 리팩토링을, 좀 더 객체지향적인 코드를 반영하지 못한 것 같아 아쉽다.
  2. 그래도, 제시된 입출력 예시와 요구사항은 충족했으니 1차적인 목표는 달성했다!

물론 2번 생각은, 몇 일 후 디스코드에 올라온 다른 참가자분의 추가 테스트 케이스를 돌리면서 인덱스 초과 상황을 하나 발견하게 되면서 약간은 불안해졌지만😂

그래도, 아쉬운 점이 계속 떠올라서 다시 들춰보기 싫지만,
프리코스 때 배운 자세가 이거였으니까.
계속되는 리뷰로 성장하는 자세, 함께 성장하는 자세, 내 코드를 들춰보는 것.

그렇게 눈물을 머금고 최종코테리뷰방에 제 발로 걸어들어갔다.
내 코드를 올리고, 다른 분들의 코드를 보는 과정에서 자존감 MIN을 찍었던 것은 비밀🤫

어떻게 저 분들은 5시간 안에 이렇게까지 구현을 하셨을까?
최대한 열심히 한다고 했지만 내 노력이 부족했던 걸까?
최종 시험장에서 내가 실수를 한 걸까?

하는 못난 생각들도 하다가,

하지만 저 분들이 저렇게 하기까지의 노력을 생각해보고, 또 내가 배울점을 생각해보면서
그렇게 몇 일을 보냈던 것 같다.🥲

다시 들춰보기 싫지만 리팩토링 해보기

다음으로, 정말 하기 망설여졌지만 해야겠다 하는 일을 했다.
바로, 리팩토링.
그렇게 가장 내 코드에서 부끄러운 부분을 다시 켜보았다.
짜잔.

지금도 널 보는 게 편하지 않구나...🫠
일단 최종 발표 전 2~3일이 남았는데 그동안의 목표는 천천히 문제를 다시 풀어보고,
리팩토링을 마무리하면서 여기서의 얻을 수 있었던 배움을 정리해보려고 한다.

결과가 어떻게 나든, 5시간동안, 그리고 더 나아가 이 우테코를 준비했던 8월부터 지금까지,
정말 최선을 다했다. 다시 돌아가도 이 이상으로 할 수 없을만큼.
그렇기에 후회하지 않고 기다리고, 계속 하려고한다!
물론 결과도 좋게나는 게 최고겠지만😇

4개의 댓글

comment-user-thumbnail
2023년 12월 25일

안녕하세요 현지님! 최종 코딩테스트 리뷰 주고 받았던 Zangsu 입니다 :)
문자열 합치는 방법의 비교 글을 통해서 처음 현지님을 봤는데, 이젠 최종코테를 치고 결과 발표를 하루 하고 15시간 정도를 남겨두고 있네요!
프리코스를 진행하는 동안 조용조용 모각코에서 공부하는 현지님 보면서 자극 많이 받았습니다 ㅎㅎ
꼭 최종 코딩테스트까지 좋은 결과 받았으면 좋겠습니다!!

1개의 답글
comment-user-thumbnail
2024년 1월 6일

멋져요 멋져 멋져부러

답글 달기
comment-user-thumbnail
2024년 8월 25일

que가 아니라 queue입니다.

답글 달기