우아한테크코스 최종 테스트

천영석·2020년 12월 19일
0
post-thumbnail

최종 테스트

12.19 우아한테크코스 최종 코딩 테스트를 5시간 동안 치렀다.

테스트 문제는 지하철 노선도 경로 조회 미션이었다.

사용자는 출발역과 도착역을 입력하고, 최단거리/최소시간을 선택해 길을 찾을 수 있다.
DOM을 조작하는 것은 딱히 없어서 5시간 안에 구현할 수 있도록 미션을 고민하신 것 같다는
느낌을 받았다.

기능만 놓고 보면 해야 할 것이 많지 않아 보이는데 난 처음 미션을 받고 30분 정도는 멍했다.

우선, 최단거리/최소시간을 선택할 수 있게 하는 input의 type="radio"를 처음 사용해봤고, checked된 것을 어떻게 구분할 수 있을지에 대해서 오랫동안 고민했다.
이것은 모든 radio에 대해 반복문을 돌면서 checked된 input을 return하는 식으로 구현했다.

또, 최단거리/최소시간을 구하는 메소드를 만들어야 하는데, 시간은 흐르고 있고, 생각할 시간은 없고.. 정말 미치는 줄 알았다.
다행히도 힌트가 있었는데, 다익스트라 라이브러리를 사용하면 최단거리/최소시간을 구할 수 있다는 것이었다.

다익스트라? 이게 뭐지? 정말 멘붕이었다.
테스트를 치르면서 검색을 해보니 최단 경로를 구해주는 알고리즘이라고 한다. 이것을 라이브러리로 util파일에 구현해주셨다.

시간에 쫓기고 있는 터라 자세히 알아보지는 못했고, 힌트에 쓰여있는 대로 몇 가지 테스트를 해봤고, 어느 정도 느낌이 와서 라이브러리를 사용할 수 있었다.

솔직히 자세히는 모르기 때문에 공부를 좀 해봐야 할 것 같고, 간단하게 다익스트라에 내가 경로를 얻기 위해 필요한 출발역, 도착역을 모두 입력하고, 각각의 시간 또는 거리를 저장해두면 반복문을 돌면서 가장 짧은 거리를 가진 역을 return해준다.

이때는 너무 시간도 없고, 이해도 안돼서 정점, 간선 둘 다 사용할 생각을 못하고, 힌트에 나와 있는 대로 간선만 사용해서 구현을 하게 되었다. 분명 문제가 발생할 것이라고는 생각했지만 우선 기능이 구현되게 하는 것이 먼저라고 생각을 했다.

분명 최종 테스트를 보기 전까지만 해도 기능 구현보다는 하나를 해도 완벽하게 하자라는 생각이었는데, 테스트를 시작하고 기능 구현에 목숨을 걸고 있는 나를 볼 수 있었다.
핑계를 대보자면 나에게는 문제가 너무 어려워서 하나라도 제대로 하자라는 마음으로 하면 정말 아무 기능도 없는 상태로 제출을 할 것 같았다. 그래서 어떻게든 기능을 구현하고자 했다..
이렇게 어려울 줄 알았나!!

어쨋든 내가 생각한 대로 구현은 됐고, 결과를 콘솔에 찍어보는데 내가 원하는 결과가 나오는 것을 확인했다. 이때 약 2시간 정도가 남았던 것으로 기억하는데, 이제 남은 것은 총 거리와 총 소요 시간만 구해서 화면에 렌더링해주면 끝나기 때문에 리팩토링도 할 수 있겠는데? 라는 생각을 했었다.

아니.. 그런데 문제가 어거지로 다익스트라를 구현한 결과 총 거리와 총 소요 시간을 아무리 생각해 봐도 구할 수 있는 방법이 없었다. 다익스트라 뿐만 아니라 애초에 설계할 때부터 잘못 설계했다는 것을 느꼈고, 결국 이 상태로는 총 거리와 총 소요 시간을 절대로 구할 수 없을 것이라는 결과를 내리고 처음 설계를 다시 뜯어고치기로 결심했다.

아쉬운 점

다익스트라에서 return해주는 결과값은 최단거리 자체이다. 즉, [a,b,c,d]와 같은 배열이 return되는데, 여기에서 [a,b]는 2분/2km, [b,c]는 3분/2km, [c,d]는 4분/3km가 걸린다고 하면 총 소요 시간은 9분, 총 거리는 7km가 된다.

문제는 [a,b], [b,c], [c,d]와 같은 배열을 내가 가지고 있는 배열에서 어떻게 찾는가에 대한 것이었다. 결국 해결 방법을 찾지 못한 채로 findIndex를 중첩으로 사용해서 어떻게든 기능을 구현하기는 했다.

하지만 이것에 대한 점수는 0점일 것을 알고 있다. 내가 봐도 무슨 코드인지 전혀 알 수 없고, 변수 명도 이상하고, 함수 명도 이상하다. 그냥 시간에 쫓겨 이름을 생각할 시간도 없었다.
너무 아쉽지만 아직 경험이 많지 않은 내 속도의 한계였고, 3주 동안 열심히 했기 때문에 이 정도라도 할 수 있었다고 생각해서 기쁘기도 하다.

만약 이 문제를 3주 전에 받았으면 일주일 넘게 고민해도 오늘 5시간 동안 한 것보다 못했을 것이라고 확신한다.

총 시간/거리 기능을 구현하고, 화면에 렌더링까지 끝낸 후에 시간을 보니 20분 정도가 남았던 것으로 기억한다.
와.. 다행이다. 내가 그래도 기능을 다 구현했네?! 라고 생각하면서 기능을 테스트해보던 중 예외 처리를 하지 않은 것이 있었고, 정말 큰 에러를 방치해뒀다는 것을 알았다.

그것은 바로 갈 수 없는 역을 입력했을 때, 오류가 난다는 것이다.
예를 들면 교대 - 강남은 갈 수 있지만 강남 - 교대는 못가게 처리를 했어야 했는데, 이것에 대한 처리를 해주지 않았고, 결국 총 시간/거리를 구할 때 오류가 발생하게 되었다.

아마도 다익스트라에서 정점을 입력해주지 않았기 때문에 생긴 오류인 것 같다. 정점을 입력하지 않았으니 [a,b,c]가 있을 때, a -> c도 되고 c -> a도 되는 것이다.

하지만 시간은 얼마 남지 않았고, 고치기에는 리스크가 컸기 때문에 상수화할 수 있는 것들을 상수화하는 작업을 끝으로 테스트를 끝냈다.

끝으로

테스트를 마치고 내 코드를 다시 한 번 봤는데, 정말 엉터리다. 비슷한 함수는 왜 계속 만들었으며, 하드코딩이 넘쳐나고, 코드가 너무 지저분해서 알아볼 수 없고..

난 아마 우아한테크코스에 합격하지 못할 것이다.
3주 동안 열심히 했지만 아직은 많이 부족한 것 같고, 이런 소중한 기회가 있었다는 것을 위안으로 삼으면서 다시 코딩 공부를 열심히 하려고 한다.

공부를 어떻게 해야 하는지에 대한 방향을 잡게 해준 우아한테크코스에게 너무 감사하고, 3주 동안 즐거웠다는 말을 끝으로 마무리를 한다.

profile
느려도 꾸준히 발전하려고 노력하는 사람입니다.

0개의 댓글