대문글

MileMoa

검색
×

마일모아 게시판   [질문]
코딩 인터뷰 준비 방법의 큰 결함?

Evan | 2018.08.12 10:02:16 | 본문 건너뛰기 | 댓글 건너뛰기 쓰기

안녕하세요, 전에 질문 글 올리고 답변에 대해서 매우 감사하고 있는 Evan입니다!

 

사실, 다음 주에 여행을 떠나기 전 일요일 같은 때에 제 Coding interview 준비 방법의 결함에 대해서 더 깊게 알아가고자 합니다.

제가 질문을 하고, 다른 사람들의 답변을 보고 다른 job seeker 분들도 많이 배울 수 있지 않을까해서 이런 곳에 다가 질문을 올립니다.

 

질문 글 올리게 되는 계기: 

 

주변의 Software Development과 프로그래밍에 자부심을 느끼고 사랑해서 tech 관련 meetup을 열어주는 소프트웨어 장인들, staff engineers, CTO 에게 Data Structure / Algorithm 인터뷰 팁 등을 물어보면, whiteboard에다가 DS / Algo 코딩 문제만으로 Software Engineer 를 뽑는다는 것은 사실상 많은 tech 기업들의 hire process가 broken 해서 안타깝다고 그러더라고요. 

 

하지만, 현실적으로 크게 성장하고 있는 tech 기업들이 Software Engineer (특히 Entry level) 들을 Hire 하는데 가장 크게 의존하고 있는 수단, Coding interview 에 대한 구체적 조언을 주질 못합니다. 스태프급 엔지니어가 하나당 45분 짜리 알고리즘 인터뷰에서, logical thinking, creative problem solving skills(efficient / concise codes), how to overcome technical difficulties, test & debug skills 을 본다는 건데, 이 인터뷰 준비 방법에 큰 결함이 있는지 집고 넘어가고 싶습니다.

 

Quora 에서 Leetcode 500개 풀어도 unemployed 인 사람에게의 조언을 읽었는데, "정답을 외우지 말고 먼저 생각하면서 풀어라", "Communication skill에 문제가 있다" 등등 구체적으로 그 사람의 공부 방법에 대한 지적이 잘 보이지 않습니다. Coding interview 에 대한 Resource 와 코딩 인터뷰의 형태, 토픽들은 너무 많은데, 올바른 공부 방법, 잘못된 방법에 대한 예시와 처음에 못했던 사람의 공부 방법 교정으로 인하여 Top tech company에 들어간 사례 등을 찾기가 어렵습니다. 

 

CS department 입학을 같이해도, 정말 잘하는 애들은 계속 잘해서 시간이 남으니, 더 어려운 문제를 풀면서 더 좋은 곳에 들어가고, 나머지는 그냥 학교 수업 근근히 따라가면서 준비를 많이 못하지만 Coding interview를 잘 요구하지 않는 government related 나 Software Engineer가 cross-side 인 곳 (신분문제가 있는 사람들은 해당 X) 으로 취업해도, 실력이 급격하게 향상해서 격차를 극복하는 친구를 보지 못했습니다. 

 

한국 수능 대비를 따지자면, 공신 강성태, Studycode 조남호 (그 분들 맹신 X) 의 학생들 보면, 아무리 과거에 공부를 못했어도, 공부 방법에 대한 큰 결함 발견과 교정으로 인해서 (중하위권 -> 최상위권) 역전사례와 팁을 알려주는 영상들이 많은데, coding interview 나 software development 이쪽에서는 이러한 사례를 잘 설명하고 교정 멘토링 같은게 많이 없어서 안타깝습니다. 주변 Tech career mentoring / coding interview prep meetups 에서는 Algorithm 가르치고, mock interview 약간 해주고, leetcode 질답해주는게 대부분 입니다.

 

저의 인터뷰 피드백은 주로:

 

1) Interviewer가 문제를 설명하면, 5분 이내로 빨리 이해를 못하는 등 새로운 문제 이해하는데 좀 걸림. (새로운 문제에 대한 긴장하면 듣고 빨리 이해하는데에 문제)

2) 문제를 이해하고 접근 방법을 알아내면, Pseudocode랑 코드 설명을 잘한다. (다른 non-English speaker 들에 비해 영어로 의사소통은 크게 문제가 안됨)

3) 코드에 문제점 발견했다 싶으면, 즉시 바꾸고 해결하려는 자세는 좋아보인다. 

4) 문제를 구조적으로 해결하려고 하고, 나만의 솔루션을 만들어 나가는데에 큰 문제가 있다. (Ex. Tree problems in Recursive ways) -> Leetcode 혼자해도 마찬가지

5) 인터뷰 경험이 좀 있어서 그런지, 문제를 듣고 바로 코드 쓰려고 하지않고, 마지막에 코드 쓴 뒤, 테스트하려는 자세와 Efficiency를 점차 optimize 하려는 자세는 좋아보인다.

6) 온사이트때, 초반에 나만의 솔루션을 잘 만들어 나가지 못하고(4번), 시간이 절반정도 흐르면, 누구보다 멘탈관리 크게 어려움. 

 

지금까지 해오던 방법(주로 인터뷰를 Java로 선택. Python은 Syntax가 별로 완벽하지 못하다 생각해서 안함):

너무 지루하고 절망에 빠져 포기해왔지만, 1달 반 전까지 하루 6-8시간에 interview prep 투자.

https://www.quora.com/What-should-I-know-from-the-CLRS-3rd-edition-book-if-my-aim-is-to-get-into-Google/answer/Jimmy-Saade?share=1&srid=TAJ1

에 나오던데로, CLRS 통해 개념을 대략 잡고 너무 어려운 부분은 GeeksforGeeks로 리뷰.

Hackerrank, geeksforgeeks 등 문제를 몇 십개 푼 뒤, Leetcode 총 128개 완료함 (질 안 좋은 easy 문제 skip하고 Medium 절반까지 품). 

일반적으로, leetcode 코딩 문제 1개당 45분을 잡고, 첫 10-15 분 아무 코드도 작성 못하겠다 싶으면, leetcode discussion board에서 가장 most voted 한 답변의 코드 손바닥으로 가리면서, 한줄 보고 내 코드쓰고, 그 다음 모르겠다 싶으면, 다음 줄 보는 식으로, 공부. 어느새부터 특히 medium 문제들 같은 경우인내심이 사라져서 10-15분 동안 모르면 답을 보려고함.

 

DS - 

Array: 기본 문제는 하도 풀어보니까 바로 나옴. DP 로 넘어가면, 정말 힘들어해서 결국 O(n^2)로 끝내고 잘 optimize 못하니까 무작정 외우려고 함.   

Sets & Maps: 가장 자신 있는 분야. 처음부터 정말 되도록 O(n)으로 끝내겠다는 생각으로 접근을 함. 

LinkedList, Stack & Queue: 문제풀다가 못 하겠다 싶으면, 개념 review 하는식.

 

*Recursion: 처음에 개념 잡기가 너무 어려워서, 제게 있어서 가장 큰 복병. 이거 때문에, 거의 제 모든 CS 코스 프로젝트에서 요구하는 recursion 때문에 전공성적 엉망. 오답 체크할때, 그 문제의 표를 그려가면서 어떻게 backtrack되고 부분의 값이 어떻게 나오는지 track 하는 식으로 하나하나 이해해서 코드가 왜 맞는지에 대해 이해함. 그런데, leetcode 풀거나 인터뷰 문제 나오면 처음에 recursive 부분에 접근할때, 머릿속으로 backtrack 하는 과정을 거치지 않고 intuitive 하게 생각하고 코드부터 쓰고 그 다음에 backtrack 함. 별 짓을해도 recursion 어떻게 마스터하는지 헷갈림.   

 

*Trees & Graphs: Queue 를 이용한 Iterative way에 익숙해진 뒤로, recursive 쪽 연습에 주력. BFS(Level-order traversal) 과 DFS(In / Pre / Post order) 선택 뒤, 어떤 order 할건지 선택한 뒤, function 만드는 과정에 집중, 역시 제 recursion의 결함으로 테스트시, backtrack하는 표를 그려가면서 디버그함.

오죽 부족하다 싶으면, tree easy 문제를 다시 한번 풀 정도.

Dynamic Programming (DP): 누구한테나 어렵고 문제를 구분할 수 있는 개념이 너무 방대함. 그러나, House robber 같은 너무 유명한 문제는 recursion 필요없어서 많이 반복하면서 optimization 하는 과정을 외우다시피 반복해왔음. 그러나, 꼬은 문제나 더 어려운 DP는 recursion을 기초로 한다는데, Recursion을 먼저 마스터 뒤, 이용해서 어떻게 optimize 할지 모르겠음.

Backtracking & Greedy: Recursion 이 약하단 생각에, Geeksforgeeks 예제 중에서 코드 한줄한줄 보면서 이해하고 끝냄.

 

Algo-

Sorting (Insertion, Bubble, Selection, Heap, Merge, Quick): 이해하고 외워도 계속 까먹으니, youtube video의 motion 보면서 상기하고 계속 외워댐.

Shortest Path: 예제보면서, 코드봐도 계속 까먹음.

Sorting과 Shortest Path는 코드보고 계속 외워대도 계속 쉽게 까먹어서 차마 이와 관련된 코딩 인터뷰 문제 풀 수 없을 지경입니다.

 

Data Structure / Algorithm 개념, Problem solving 쪽을 마스터하면, 그 때 Python에 더 배우고 익숙해져서 코딩 인터뷰 랭귀지를 Python으로 넘어갈 계획입니다. 

 

다시 말하자면, 저는 이런 곳에서 이 질문으로 당장 완벽한 코칭을 기대하지는 않습니다. 어차피 여기서 제 수준을 완벽하게 표현할 길도 없지만, 여러 조언(의견)과 결함의 지적을 바탕으로 하여, candidate 자신의 문제점에 clarify하고 자신의 코칭 방법을 개발하는건 자신의 몫이라 생각합니다. 

조언 감사드리겠습니다.

 

댓글 [59]

목록 스크랩

마일모아 게시판 [114,536] 분류

쓰기
1 / 5727
마일모아 사이트 맞춤 구글 검색