If I were wrong, then one would have been enough

"만약 내가 정말로 틀렸다면 단 한 사람의 반대로도 충분 했을거야."

Coding interview

2021 NHN Pre_test 1차 리뷰

sumi_ni 2021. 10. 29. 22:39

시험 시간⇒ 14:10~16:10
시험이 10분 늦게 시작하였다. 사유는 서버가 갑자기 들어온 인원을 충분히 감당하지 못한 듯하다...

1번 Merge & Branch

14:47 끝
구현 느낌이 강하게 풍겨왔다.
처음에는 큐, 스택을 사용하면 쉽게 풀릴 듯했지만 그렇게 되면 탐색을 계속 돌려야 하는 문제라 넘기고 쉽게 구현할 수 있는 배열을 중심 개념으로 문제를 풀어갔다.
최소 힙을 구현할 수 있으면 그걸로 풀어도 괜찮을 듯 하지만 내가 푼 인덱스를 참조하는 기법을 사용하는 게 시간 측면에서 일반적으로 효율적일 듯하다. 물론 최악의 케이스에선 이진 탐색을 섞은 풀이가 더 괜찮을 듯하다.

2번 공격 준비

15:40 끝
문제를 풀기는 했다. 테스트 케이스까지 깔끔하게 통과했다. 그래도 문제의 의도가 이해되지 않는다.
어떤 걸 염두에 두고 만든 것일까? 지역을 나누는 것 까진 괜찮았지만 그 이상으로 고심하게 만들지 못했다. 내가 문제를 이해하지 못한 것일까? 문제가 너무 쉽게 보여도 푸는 사람의 입장에선 의심이 가기 마련이다.
내가 작성한 풀이는 간단하다 사용한 알고리즘은 정렬이 끝이다. 우선 각 주파수들의 개수를 카운트하는 배열을 만든다 문제에서 주파수가 20가지가 끝이라고 했으므로 21개를 만들었다.
그리고 모든 입력을 훑어 주파수 개수를 모두 기록한다.
마지막으로 주파수 개수를 내림차순으로 정렬하여 K번째까지 더하여 답으로 제출했다.
문제에선 공격할 수 있는 주파수의 개수를 물어봤지 주파수를 물어본 게 아니기에 마지막에 정렬을 사용해도 문제가 없다 판단하여 빠르게 답을 구하고 끝냈다.

3번 갈등

15:12 끝
8명이 고정이란 사실에 큰 생각 없이 브루트포스나 백트래킹을 생각하며 문제 풀이를 구상했다.
역시 구상한 대로 백트래킹을 사용하여 거침없이 풀었다. 아마 이 시험에서 가장 자신 있는 문제일듯하다. 싸움 정보들을 2차원 그래프에 옮기고 백트래킹 할 때 배열을 참조하며 싸우는 이가 없도록 계속 앞으로 밀고 나가는 느낌의 풀이를 짰다.
테스트를 하는데 단 한 번만에 정답이 떠서 기분 좋게 제출하고 2번 문제로 넘어갔다.

1차 테스트 총평

문제 풀이는 1 → 3 → 2 이 순서대로 풀었다. 뭐 처음 문제를 다 훑었을 때는 살짝 난이도 있어 보였지만 막상 풀어보니 난이도는 그다지 높지 않았기에 시험 결과는 누가 더 예외 케이스까지 신경을 써서 풀었는지, 시간 효율을 누가 더 고려했는지에 따라 결정이 날듯 하다. 처음이라 많이 긴장도 하고 주력언어 python이 아닌 C 언어로 급하게 준비하여 잘 풀어낼 수 있을지 걱정도 많았지만 생각외로 쉽게 시험을 봤다. 추후에는 C++를 제 2의 주력언어로 사용할 수 있도록 열심히 공부해야겠다.
모든 문제를 풀었더니 30-40분이 남아 검토를 할 생각도 해봤지만 귀찮기도하고 배고파서 바로 선임들과 함께 배달시킨 떡볶이를 먹으러 갔다.

 


후기 (2021. 11. 04)

솔직히 난이도가 크게 별나지 않았기에 떨어질 걱정은 하고 있지 않았지만 막상 붙고나니 기분이 내심 좋았다.

NHN뿐만 아니라 다른 기업들 코테에서도 큰 무리없이 합격할 수 있게끔 앞으로는 꾸준히 알고리즘 공부를 계속해 나아갈 것 같다.

나름의 새로운 동기부여를 해줄 수 있는 좋은 기회였다.