[우아한테크코스] 6기 1차 합격, 최종 코딩 테스트 후기


우테코 1차 합격을 본 건 시간이 좀 지나고 나서였다. 12월 11일에 1차 합격 발표가 나왔는데, 그 주간이 학교 시험 주간인 데다, 3시가 넘어서야 시험이 끝나는 바람에 부랴부랴 계단으로 가서 합격 결과를 확인했다.

보고 싶었어요 테크코스!

프리코스 1주차 PR 제출자가 2500명이 넘었던 데다가, 2배수인 걸 감안하면 160명 안팎으로 1차 합격자가 선발됐을 것이다. 내가 쟁쟁한 경쟁률을 어떻게 뚫었을까..? 싶었던 1차 합격. 한 달동안 열심히 프리코스만 쳐다본 것을 생각하면 노력을 알아주신 것 같아 감사하기도 하다.

12월 16일, 13시부터 최종 코딩 테스트가 진행됐다. 선릉 캠퍼스와 잠실 캠퍼스로 나뉘어서 시험이 치러졌는데, 난 운이 좋게 집과 조금 더 가까운 선릉캠퍼스에서 시험을 보게 됐다. 최종 코딩 테스트에 대한 대비로 5시간동안 이전 시험을 두 번 풀어봤는데, 두 번 다 실패했다. 그 패인을 미약한 설계라고 생각했고, 최종 코딩 테스트에서는 꼭 확실하게 설계한 뒤에 키보드에 손을 대기로 마음먹었다. 그리고 그 전략이 잘 통했던 것 같다!

네, 그 돌아가는 쓰레기.. 제 손에서 만들어진 것만 같아요

시험 시작 전부터 조금 혼선이 있었다. 와이파이 연결이 다들 안 돼서 시험이 30분이 미뤄졌다. 나름 긴장 떨칠 시간을 벌어서 다행이라고 생각했었는데, 다른 분들은 어땠는지 모르겠다. 이 기회로 양 옆에 계신 분들과 인사도 나누고, 기운도 주고받는 시간을 가졌다.

시험은 굉장히 열려 있었다. 인터넷 검색은 물론이고, 음악을 들으면서 해도 됐다. 나는 에어팟을 끼고 바다 소리만 잔뜩 들었다. 요즘 긴장을 가라앉혀 주는 데 정말 도움이 되는 것 같다. 내 기억으로는 3-4시간이 넘어가면서 많은 사람들이 ChatGPT와 함께 춤을(…) 추는 걸 봤다.. 변수 이름이나 메서드명을 짓는 데 어려움을 겪었다고 옆에 계셨던 분이 말씀해 주셨다. 이런 부분에서는 참 생성형 AI랑 잘 맞는 듯 싶다!

미션은 이 링크로 전달됐고, 4주 차 비공개 미션처럼 채점용 계정을 레포지토리에 초대하는 방식으로 진행됐다. 엄청난 길이의 지문에서 한 번 당황했었지만, 이내 천천히 문제를 둘러보기로 했다. 이번 미션은 근무표를 작성하는 것이었다. 문제를 보자마자 군 생활이 떠올랐다. 행정병을 맡았었는데, 내 손으로 비상대기 근무 명단을 엑셀 스크립트로 만들었던 게 생각나서 웃음이 나왔다. 공평한 근무표를 위해 평일 순번, 휴일 순번으로 나누고 이틀 연속 근무하는 경우 다음 사람을 잠깐 사용하는 것이 주된 요구사항이었다.

특히 회사 이름이 우택호였던 게 참 재미있었다. 4주 차에서 진행한 이메일에서 요구사항 뽑아내기를 다시 만났다. 이번에는 공문에서 요구사항을 뽑아내는 것이었는데, 4주 차 때 진행한 것보다 훨씬 단도직입적이었고, 도메인에 대한 제약 사항을 잘 드러내서 적용하는 데 크게 어렵지는 않았다.

주식회사 우택호

예제를 통과한 시점은 3시간이 조금 더 지난 후였다. 시간이 촉박할 것 같아 테스트를 작성하지 못하고 기능 구현을 주욱 밀고 나갔다. 뭔가 이상한데? 라고 생각했지만 돌아볼 틈이 없었다. 테스트 통과를 확인하고 한숨을 놓을 때쯤, 이상하다고 생각했던 부분을 다시 확인했다. 확실히 잘못 구현된 부분과 확인하지 않는 제약 사항들이 눈에 띄기 시작했고, 그 부분을 중심으로 테스트를 작성하며 고쳐나갔다.

테스트를 추가한 뒤 늘어나는 fix 커밋. 시간에 쫓기다보니 어쩔 수 없었을까? 나의 습관이 불러온 것일까?

나는 이번 미션을 Iterator를 사용해 구현했다. 순번 중에서 지금 누구 차례인지를 알고자 할 때, 어디까지 진행했는지를 확실하게 알고 있어야 대응하기 편리했기 때문이었다. index라는 정수를 둘 수도 있었겠지만은, 앞뒤로 자유롭게 이동할 수 있는 ListIterator를 사용하기로 했다.

…다만, Iterator를 제대로 사용해본 적이 없어서 많이 서툴렀다. next()를 하는 순간 보고 있는 것을 꺼낸 뒤 다음 인덱스로 넘어가버리기 때문에, 단순히 확인만 할 때도 뒤로 넘어갈 때가 있었다. 이런 경우를 하나하나 고치느라 애를 많이 썼다. 두 번 연속인 경우 한 번 넘어간 뒤 체크하는 것도, 다시 Iterator를 앞으로 돌려내는 것도 쉽지 않았다. 예제 테스트는 통과하지만, 단순하게 손으로 만든 예제가 통과하지 않는 경우가 종종 생겨 예제 테스트를 곧이곧대로 믿는 것은 진작 내려뒀었다. 지금 보니 도메인 책임이 너무 큰 것 같아서, Iterator를 다른 클래스로 뽑았으면 어땠을까 싶다. 여러 책임이 들어있는 것 같아 조금은 아쉬웠던 부분이 이 곳이다.

44개의 커밋..

5시간의 압박은 UCPC, ICPC에서도 느껴본 터라 긴 시간이 아니라는 것은 잘 알고 있었다. 그래서 더 소중하게 시간을 활용하려고 애썼다. 처음에는 설계 – 코딩 – 리팩터링 후기 1:3:1로 챙기려고 했다. 하지만 3시간 만에 구현을 다 할 수 있을 거란 건 나의 착각과 오만이었다. 시작하자 마자 20분 정도에 요구사항 기본 문서를 작성하고, 살아있는 문서를 만들기 위해서 지속적으로 커밋과 함께 살을 덧붙였다.

예제 테스트는 통과! 다른 건 어떨까?
이 이미지는 대체 속성이 비어있습니다. 그 파일 이름은 image-8.png입니다
6기 최종 테스트에 추가된 “미션 해결 전략”

이번 미션에서는 지금까지의 미션과는 다른 것이 하나 추가됐다. 문제를 해결하는 과정을 정확하게 이해하고 있는지를 확인하는 것 같았다. 필수는 내가 진행했던 것을 잘 풀어서 썼고, 선택 문제에서는 고민을 좀 했다. 나는 공평성의 관점에서 나만의 풀이를 써내려갔던 것 같다. 기존 방식에서 발생할 수 있는 문제점과, 이를 어떤 방식으로 해결할지를 작성했다. 마감 30분 전에 작성해서 정신없었지만, 어쨌든 잘 마무리한 것 같다..!

이렇게 바쁜 12월도 절반이 지나갔다. 오늘 마치고 나오는 길이 꽤나 추웠던 데다가 눈도 왔다. 25일에 3주간 유럽으로 떠나는데, 27일에 결과가 발표돼서 시차를 뚫고 확인해야 한다. 15시 발표니 영국 시간으로는 오전 6시가 될 것 같다. 다른 사람들보다 더 빨리 확인한다는 마인드로 일찍 일어나서 결과를 확인해야지. 우리 내년에 꼭 봐요..! 🪐


제가 구현한 코드는 이곳에서 확인하실 수 있습니다.

Categories