H사 코딩테스트를 치고나서 생각했다.
“내가 뭔가 잘못하고 있구나. 이대로는 안되겠다”
간단한 복기
180분 동안 총 2개의 문제를 풀면됐다.
늘 그렇듯, 2개의 문제를 읽었다.
둘 다 풀 수 있을거라 생각했다. (뭐 이정도면 3시간까지도 안들겠네..)
첫번째 문제를 풀기 시작했다.
생각보다 쉽지않다. 풀다보니 애드혹 알고리즘 같았다. (모르면 못푸는..)
시간이 2시간 지났다… 이대로는 안된다. 2번으로 가자.
2번을 10분정도 봤을까? 매몰비용이 생긴 1번이 눈앞에 아른아른 거린다.
“조금만 더하면 풀릴 것 같은데…”
다시 1번으로 향했다. 규칙 찾으려고 A4 2장을 양면으로 빡지를 썻다.
시간이 끝났다. “벌써?”
“이대로는 오늘 잠을 못잘 것 같다. 끝을 봐야겠어.”
이 후 30분 정도 인텔리제이에서 코드를 작성했다. 무엇인가 규칙을 찾았다.
N이 1억일 때 연산횟수를 카운트해보았다.
"무언가 방법을 찾아야한다."
“코드에서 시간을 줄일 수 있는 방법은 여기밖에 없는데?”
방법을 찾지못해 GPT에게 물어보았다.
“이건 등차수열의 합이라는 공식을 사용하면 되겠는데요 선생님?”
(듣고 아차 싶었다..)
그렇다. 해당 문제는 어차피 끝에 도달했어도 풀지 못했을 것이란걸.
이제야 비로소 2번 문제가 눈에 들어오기 시작한다.
비록 10분정도 봤지만 기억을 더듬어보니, 내가 좋아하는 시리즈인 “벽 부수고 이동하기”와 같지 않은가?
https://www.acmicpc.net/problem/14442
뒤늦은 후회는 필요없었다.
내가 잘 못 선택했고, 실력이 부족했던거니까.
성과와 나의 간단한 생각.
이번 코딩테스트의 결과부터 말하자면 0/2솔이다.
A4랑 볼펜으로 규칙찾기 게임만 잔뜩하다가 나왔다. (2장 양면 빡지 분량)
“2번부터 풀었다면 한시간 정도면 충분했을텐데.”
똑같은 실수를 2번 하면 못 버티는 사람으로 반성해야만 한다.
내가 한 실수는 무엇이였나
결론부터 말하자면 “시간 전략”이 잘못되었다.
차라리 문제 당 시간을 정해주면 좋겠다. 더 건드리지 못하게.
두번째 실수는 “문제를 꼼꼼하게 읽어보지 않았다.”
처음 입장하고 두 개의 문제를 꼼꼼하게 읽어봤다면 2번 문제는 무조건 풀었을 것이다.
왜?
그래프는 수도없이 풀어왔다. 그래프에서 헤엄치는 아쿠아맨이라는 별명도 있을만큼.
이제는 어떻게 할 것이냐
시간과 관련해서는 완벽주의 때문인가, 매몰비용에 대한 초조함때문인건가 정의를 제대로 해야할 것 같다.
완벽주의?
총 2개의 문제로 모두 풀지 못할거라면 차라리 풀지 않을거냐? 라고 물어본다면 “아니다”
이번 코딩테스트를 위해 시간제한이 빡빡한, 효율 중심의 문제를 꾸준히 풀었다.
“그래 풀 수 있을 것 같아.” 라고 생각한 시점에서 어느정도의 투자는 각오했다.
그러나 규칙을 찾는 과정에서 필요 이상의 시간을 사용했고, 끝내 못푸는 문제란걸 확인까지 했다.
만약 2번이 쉽게 풀 수 있었다는 걸 확인했다면 난 2번부터 풀었을 것이다.
초조함?
2시간이 지난 시점에서 2번문제로 갔다.
그러나 계속 못풀고 지나간 1번문제가 머리에 멤돌았고, 읽어도 읽는 것 같지 않았다.
평소에도 지나간 일에 생각을 많이하고, 후회도 많이하는 성격이라고 생각했다.
이러한 성격이 시험환경에 그대로 녹아든 것이 아닌가.
그렇다 난 매몰비용에 대한 후회로 실수를 한것이다.
생각해보면 토익, NCS 등의 시험을 치룰 때도 시간 배분은 정말 중요한 요소 중 하나다.
그러나 코딩테스트는 특성 상 문제 당 시간배분이 널널한 편이라 더욱 관리가 되지 않는 듯 하다.
사실 답은 간단하다. 총 시간 / 문제 수의 시간만 투자하는 것이다.
“문제를 꼼꼼이 읽지 않았다.”
라는 실수는 사실 1번을 읽고서 “풀 수 있겠다”라고 생각한 시점부터 1번을 풀고나서 2번을 보려했었기에 실수 했다고 생각한다.
추가적인 요소로는 오름차순으로 난이도가 정해지는게 보통이였기에, 이번에도 같을 줄 알았다.
그러나 다양한 알고리즘 분류에 강점, 약점이 있듯 문제를 바라보는 시각또한 다를 수 있다.
이번 실수 또한 답은 간단하다.
문제 당 정해진 시간만큼 투자하고 읽으면 된다.
예로 문제 당 90분을 투자하기로 전략을 세웠다면, 그 중 10분씩을 미리 읽고, 이해하는데에 사용하기로 하면 되는 것이다.
정리를 해보자.
N개의 문제 중 나의 강점에 따라 각 문제에 투자할 수 있는 시간은 상대적이다. (때때로 ∞를 가질 수 있다.)
당연히 오름차순으로 문제풀이를 시작하는게 맞지 않겠는가?
이를 위해 초조하더라도 정해진 시간만큼 읽고 이해하는데에 투자해보자.
그러나 내가 시간을 잘못 책정했다면?
2번을 읽고도 1번이 더 쉽게 느껴질 수도 있다.
"그러나 사실 1번이 ∞였다면?"
이를 방지하기 위해 각 문제에 정해진 시간 이상을 투자해도 디버깅 단계로 가지 못한다면 과감히 버리기로 하자.
이 간단한 전략을 적용함으로써 코딩테스트의 성과가 다를 수 있을 거라 생각한다.
'CS > 알고리즘' 카테고리의 다른 글
[회고] 지난 문제를 다시 풀어보며, 좋은 코드에 대해 (0) | 2024.11.22 |
---|---|
[PS] 백준3109 : 빵집 (Java) (0) | 2024.11.22 |
다이나믹 프로그래밍(DP) 접근법 및 풀이 전략 (3) | 2024.10.31 |
[PS] 백준17485 : 진우의 달 여행 (Large)(Java) (3) | 2024.10.24 |
[PS] 프로그래머스 Lv4 : 도둑질(Java) (0) | 2024.10.14 |
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!