코딩인터뷰 완전분석 - 면접장 안에서 기술 문제 대처 요령

update : 2016-06-07

목표

  • 면접장 안에서의 기술 문제 대처 요령을 알아본다. 책 ‘코딩인터뷰 완전분석’에 나와 있는 내용 중 주요 내용 발췌

저자 왈, ‘면접은 원래 어려운 것이다. 그러니 모든 문제를 바로 풀지 못해도 괜찮다. 120명 이상의 지원자 중 원하는 답을 내놓은 사람은 10명에 불과했다.’ 라고 함. 어려운 문제를 만나도 당황하지 말고, 어떻게 풀 것인지 이야기하라.

1. 기술 문제를 푸는 다섯 단계

기술 문제는 다음의 다섯 단계를 따라 풀면 좋다.

1.1. 면접관에게 문제의 모호한 부분에 대해 묻는다.

  • 기술적인 문제들은 생각보다 모호하다. 명확하지 않은 부분은 반드시 질문한다.
  • 좋은 질문을 던지는 것도 능력이다.
  • 좋은 질문들의 예 : 자료형, 데이터의 수, 사용자의 존재 등에 대해 묻는다.
  • (코딩 전 면접관과 대면하는 경우에 해당 함)

1.2. 알고리즘을 설계한다. 알고리즘을 설계하는 동안 다음과 같은 질문들을 던져본다.

  • 시간과 공간 복잡도는?
  • 데이터가 크거나 많아질 경우는? ex) 7^100의 마지막 자리 찾기
  • 내 설계가 다른 이슈들을 파생시키지는 않는가? ex) 변형된 이진 탐색트리를 만들었다면. 당신의 설계가 삽입/삭제/탐색 시간에 영향을 미치지는 않는가?
  • 다른 이슈나 한계점이 있다면, 적절한 타협안을 만들었나? 또한 이 타협안이 동작하지 않는 시나리오는 무엇이 있나?
  • 면접관이 데이터의 특징을 명시했다면, 그 특징을 활용했는가? ex) 데이터가 age일 경우

1.3. 가상 코드(pseudo code)를 먼저 작성한다.

  • 가상 코드를 적으면 생각을 정리하고 실수를 줄이는 데 도움이 된다.
  • 하지만 무엇보다 중요한 것은 실제 코드이다.

1.4. 적당한 속도로 코드를 작성하라.

  • 급히 하지 말고 차분함을 유지하면서 적절한 속도로 코드를 작성하라.
  • 자료구조를 풍부히 활용하라
  • 코드가 복잡하게 보이지 않도록 한다.

1.5. 코드를 테스트하고, 주의 깊게 오류를 교정하라.

  • 극단적인 경우 : 0, 음수 null, 최댓값, 최솟값
  • 사용자의 실수 : 만일 사용자가 null이나 음수 값을 주면 어떻게 되나
  • 일반적인 경우 : 일반적인 경우에 대해서도 테스트

* 좋은 코드의 속성

좋은 코드는 다음과 같은 속성을 갖고 있다.

  • 정확함 : 예상한 입력/예상하지 못했던 입력에 대해서든 코드가 정확히 동작해야 한다.
  • 효율성 : 시간과 공간 효율성이 좋아야 한다.
  • 단순성 : 100줄 대신 10줄로 만들 수 있다면 그렇게 하라.
  • 가독성 : 당신이 만든 코드를 다른 프로그래머가 읽고 이해할 수 있어야 한다. 필요한 곳에는 주석이 달려있어야 한다.
  • 관리가능성 : 제품 개발 사이클 동안에 적절히 변경이 가능해야 하고, 최초로 작성한 개발자뿐만 아니라 다른 개발자도 쉽게 관리 가능한 코드여야 한다.

참고문헌

책 - ‘코딩 인터뷰 완전분석’