상세 컨텐츠

본문 제목

SHOW ME THE CODE 2022 3rd 후기

Life/IT

by 2 Mir 2023. 1. 16. 21:40

본문

 

원티드에서 주관하는 알고리즘 코딩테스트가 있어서 가볍게 참여해 보았다.

계절학기 기말고사 이틀 전이라 따로 준비는 하지 않고, 앞으로 있을 코딩 테스트의 워밍업이라는 생각으로 지원했다.

 

플랫폼이 BOJ 기반이라는 것을 하루 전 접속 테스트 링크를 받고서야 알게 돼서 기분이 좋지는 않았다.

BOJ가 안 좋다는 게 아니라, BOJ에서 JS를 사용하기 쉽지 않기 때문이다.

2년 전 이맘때에는 C++로 알고리즘 문제를 풀었었는데, 참여하고 있는 알고리즘 스터디에서 작년부터 플랫폼을 프로그래머스릿코드로 옮기면서 알고리즘도 JS로 풀기 시작했다. 요새는 릿코드에서 TS로 풀고 있다.

 

사실 알고리즘을 JS로 푼다는 것에 대해 좋지 않은 시선이 있을 수 있다는 생각이 든다. 실제로 JS로 알고리즘을 푸는 것은 매우 불편하다. 그나마 프로그래머스나 릿코드는 입력을 매개변수로 주지만, BOJ는 순수 I/O기 때문에 node.js의  fs  나  readline  이라는 모듈로 전처리를 한 번 해줘야 한다. 또한 입력 기본이 string이라 연산을 해야 할 때에는  parseInt()  나  Number()  로 한 번 더 처리해야 한다. 이번 쇼미더코드에서도 입력을 변수로 옮기는 데 시간이 좀 걸렸다.

 

그럼에도 JS의 장점은 있다. 가장 익숙한 언어면서, 문자열이나 배열 관련해서 상당히 많은 메소드들을 지원해 주고, 간단한 코드 결과가 궁금하면 크롬 켜서 F12에다가 테스트해 봐도 된다. 이러한 장점은 문자열 처리나 구현 관련 문제들일 때 빛을 발한다. 물론 이번에는 그런 문제들이 아니어서 살짝 아쉬웠다.

 

보다시피 BOJ에서 JS로 살아가는 것은 쉽지 않은 일이다.

 

이번 문제들은 전체적으로 창의적인 부분보다는 그 문제에 적합한 알고리즘을 알고 있는지묻는 것에 가까웠으며, 비슷한 문제를 풀었던 경험이 있다면 너무나 쉽게 풀 수 있는 문제였다. 이게 억울한 이유는 1번 문제를 당시 바로 떠오른 방법으로 풀었을 때에는 시간 초과 / 메모리 초과의 향연이다가, 검색해서 찾은 알고리즘을 쓰자마자 풀린 것이다. 역시 DP는 한 번에 생각하기는 쉽지 않다.

 

2번 문제는 전형적인 BFS / DFS 이었고, BFS로 풀었다. 원래는 의미상 배열에 있는  .shift()  와  .push()  를 써도 된다. 그러나  .shift() 의 경우 빼낸 다음에 한 칸씩 당겨야 하기 때문에 성능이 아주 처참한 편이다. 따라서 BOJ에서는 큐를 직접 구현해서 쓰는 것이 마음이 편하고, 그렇게 풀었다. 우선순위 큐를 써야 하는 문제라면 그 또한 구현해서 풀어야 시간 초과를 피할 수 있다. 이 또한 JS의 단점이라고 할 수 있겠다. JS로 알고리즘 문제를 푸는 방법에 대해서는 다음에 한 번 정리를 해보면 좋을 것 같다.

 

3번은 풀겠다는 마음보다는 앞 문제들이 웰논이었듯 3번도 그래 보여서 알고리즘 찾다가 시간을 다 써버렸다. 변명이지만 풀고 싶다는 마음이 들지 않았던 것도 사실이었다. 어차피 검색하면 나올 텐데 뭐... 라는 생각이 들었을 때부터 이미 끝난 게임이었다.

 

이번 코딩 테스트를 보면서 든 생각은 출제하신 분들의 의도가 있으셨겠지만 전체적인 분위기나 퀄리티가 상당히 어중간했다. 물론 JS라 당했다! 가 컸지만, 여태까지 참여해 본 코딩 테스트들에서 고이난도 문제가 난이도가 높은 이유는 어떤 알고리즘인지 알아도 응용을 못하면 못 푸는 형식이었다면 이번에는 앞서 언급했듯이 알면 너무 쉽게 풀고 모르면 감조차 찾기 힘들었기 때문이다. 그러고 보면 알고리즘이라는 분야는 그런 면에서 문제를 내기 어려울 것 같다고 느꼈다.

 

'Life > IT' 카테고리의 다른 글

[boostcamp] 멤버십 수료 수기  (1) 2021.12.13
[boostcamp] 코딩 테스트부터 챌린지까지 수기  (0) 2021.12.08

관련글 더보기

댓글 영역