djflexible
June 07, 2016
dongdongalcohol@gmail.com
코딩인터뷰 완전분석 - 면접장 안에서 기술 문제 대처 요령
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줄로 만들 수 있다면 그렇게 하라.
- 가독성 : 당신이 만든 코드를 다른 프로그래머가 읽고 이해할 수 있어야 한다. 필요한 곳에는 주석이 달려있어야 한다.
- 관리가능성 : 제품 개발 사이클 동안에 적절히 변경이 가능해야 하고, 최초로 작성한 개발자뿐만 아니라 다른 개발자도 쉽게 관리 가능한 코드여야 한다.
참고문헌
책 - ‘코딩 인터뷰 완전분석’