반응형

전화상으로 진행하는 코딩 면접을 위해서 예상 문제들을 살펴보며 어떻게 해결할 수 있을지 머리속으로 그려 보고, 더러는 종이나 메모장에 바로 pseudo code를 작성해 보고 있다. 그런데, 내 생각을 정리해서 "깔끔하게" 문제를 해결하는 순서를 설명하기가 예상하는 것보다 쉽지 않다. 


주어진 문제를 보고 입력과 출력이 어떻게 되어야 하는지는 비교적 쉽게 정의할 수 있다. 문제는 입력으로부터 출력까지 도달하기 위해, 거시적인 안목에서 어떤 순서를 거쳐야 하는지를 단번에 나열하는 것은 쉽지 않다. 거시적인 안목, 즉 top-down approach로써 문제를 생각해 보려고 노력하는데, 일단 top-down 측면에서 옳다고 생각해서 나열한 순서를 다시 한번 자세히 따져 보면 비효율적인 방법임을 깨닫게 되는 것이다. 예를 들어, 일단 큰 그림에서 문제 해결의 순서를 plain text 형식의 코멘트로 써 놓고, 해당 코멘트에 대응하는 실제에 가까운 코드를 작성하다 보면 뒤늦게 지금 작성중인 이 방법이 결코 효율적이지 않다는 사실을 깨닫는 것이다.

Top-down 관점에서 큰 순서에 영향이 없이 세부적인 부분을 개선하는 방식으로 생각을 좁혀 가는 것이 문제를 해결하는 가장 이상적인 방법이지만, 충분히 고민하지 않은 채로 큰 그림을 얼른 대충 만들게 되면 나중에 top-down 측면의 순서를 모두 고쳐야 하는 불상사가 생기기도 한다. 즉, 근본적으로 방향을 잘못 짚는 경우에 해당한다.


그러면 어떻게 해야 할까? 가장 이상적인 방법은 두말할 것도 없이 처음부터 효율적인 해결책을 top-down 관점에서 설명하고, 그 순서대로 코드를 구체화시켜 가는 것이다. 하지만 그렇게 바로 생각해낼 수 없다면, 위와 같이 해결방법에 큰 수정이 발생하더라도 이를 감수하고 다시 차근차근 고쳐 가는 것이 안전할 것이다. 일단 간단한 해결책부터 먼저 제시해 놓고, 그것을 검토하면서 더 효율적인 방법으로 코드를 수정해 가겠다고 지속적으로 면접관들에게 설명하면서 멈추지 않고 진행하는 것이다.

적어도 이렇게 하는 것이 심리적 압박감으로 인해서 아무 것도 생각해 내지 못하고 머리가 하얗게 되어 버리는 것보다는 나을 것이다. 결국 어떤 상황에서도 평정심을 유지한 채 점진적이고 지속적으로 답을 발전시켜 나가는 마인드 컨트롤의 문제로 볼 수도 있다.

처음부터 조금 더 효율적인 알고리즘의 큰 그림부터 그려나갈 수 있도록 꾸준히 예상문제들의 해결 방법을 생각하고 코드로 연습하는 것 외에는 왕도가 없어 보인다. 조금 더 노력해 보자...


반응형
블로그 이미지

Bryan_

,