이전 포스트에서 코딩 인터뷰에서 어떻게 하면 효과적인가에 대해서 알아보았다. 이번에는 코딩 인터뷰를 잘 보기 위해서 어떻게 연습을 하면 좋은지에 대해서 알아보려고 한다.
이번에는 leetcode.com 에 대해서 알아보려고 한다.
연습할 때는 가능하면 종이나 화이트보드에 연습하면 좋다. 아직 해 보지 않은 분이라면 한번 해 보면 새로운 경험을 하게 될 것이다. 실제 코딩을 할 때는 머리로 생각하기 전에 손이 가는 대로 코딩을 하기도 하고, IDE의 auto-complete의 도움을 받기도 한다. 그런데 손으로 코딩을 하기 위해서 반드시 먼저 생각이 정리되어야 한다. 키보드로 칠 때만큼 수정이 쉽지 않고, 빠르지 않다. 그리고 어느 정도 연습을 하게 되면 손으로 코드를 작성하더라도 컴파일 오류가 나지 않는 코드를 작성할 수 있다. 손으로 코드를 작성하면 속도가 느리기 때문에 코드를 작성하면서도 생각할 시간이 많다.
연습할 때는 다음의 순서대로 연습하는 것을 추천한다.
- 적당한 문제를 선정하는 것이 중요하다. 30분 이내로 풀 수 있는 문제를 선택하는 것이다. 처음에는 그런 문제를 선택하는 선구안을 가지고 있기 어렵다. leetcode에서 Easy, Medium 정도의 난이도가 적당하다고 생각한다. hard 문제도 코드가 길거나 30분 이내에 풀 수 없는 문제는 아니다. 그러나 최적의 솔루션을 찾아내는데 경험이 부족하다면 처음 접했을 때 30분 이상 걸리는 경우가 많아서 우선 어느 정도 익숙해지기 전까지 Easy, Medium 문제를 선택하는 것이 좋다.
- 한 문제를 2~3시간 정도를 고민해도 답을 찾기 어려운 경우에는 과감히 포기하고, 다른 사람들이 어떻게 풀었는지를 살펴보는 것을 추천한다. 다른 사람의 코드를 보면 알겠지만 생각해보지 못했던 풀이 과정인 경우가 많고, 현재 알고 있는 지식수준으로 풀기 어려운 문제인 경우가 많다. 저도 처음에는 한 문제를 가지고 3일~4일을 고민한 적도 있었으나 다른 사람의 코드를 보고 나서 느낀 점은 1달을 고민해도 내가 못 풀겠구나 하는 생각을 한 적이 많다.
- 풀기 전에 반드시 최적의 솔루션을 생각하고, 전체적인 outline까지 생각하고 손으로 코드를 작성해 본다. 그리고 leetcode에 옮겨 적어보고, 얼마나 많은 컴파일 에러가 발생하는지 확인해 보고, 처음에 잡았던 outline과 얼마나 코드라 달라지는지 확인해 보면 좋다. 점점 그 격차가 좁혀지는 경험을 하게 될 것이고, 나중에는 컴파일 에러는 거의 발생하지 않는 코드를 작성할 수 있을 것이다. 물론 연습하는 것이 어렵다. 그래도 반드시 거쳐야 하는 과정이라고 생각한다.
- 그리고 코드를 작성할 때 항상 말하면서 작성하는 연습을 하면 좋다. 내가 지금 무엇을 하고 있는지, 왜 이렇게 하고 있는데, 클래스 이름, 변수명은 왜 이렇게 작성했는지, if문을 썼다면 true/false 조건에 대해서 설명하는 연습을 하면 좋다.
- 그리고 코드를 제출하면 Wrong Answer를 받게 되면 IDE의 도움을 받아 디버깅하고 싶은 마음이 생기겠지만 반드시 눈으로 디버깅해 보기를 추천한다. 점점 속도가 빨라지고, 자주 하는 실수를 발견하게 될 것이고, 점점 정확하게 된다. 아무리 봐도 에러를 찾지 못하는 경우에 한해서 IDE로 디버깅하는 것을 추천한다.
- Accepted를 받았다면 최적화를 해 보면 좋다. 코드를 가독성높게, 짧게, 최적화시키는 연습을 하면 좋다. 아래는 제 프로필인데 푼 문제수는 344개인데, Accepted Submission은 656이다. 즉, 맞더라도 최적화를 위해서 2~3번 반복해서 지속적으로 최적화를 시켜서 제출해서 Submission 수가 더 높다.
- 할 수 있는 한 최적화를 해 보고 가장 좋은 코드를 작성했다고 생각할 때 반드시 남의 코드를 확인해 보면 좋다. 아하. 하면서 생각하지 못했던 멋있는 코드들이 많다. 아래 탭에서 다른 사람의 코드를 볼 수 있다. '좋아요'를 많이 받은 순서로 정렬이 되어 있어서 대부분 가장 위의 코드를 살펴보면 된다.
- 시간이 흐른 뒤에 다시 한번 풀어보는 것을 추천한다. 그리고 이번에 내가 작성했던 코드와 비교해보면 100% 자신이 성장한 모습을 볼 수 있을 것이라고 장담한다. 아마 예전 코드를 보면서 '내가 왜 이랬을까? 하면서 의아해 할 거다.
마지막으로 답을 보고 싶을 때에는 leetcode에서 제시하는 솔루션보다 다른 사람의 추천을 많이 받은 코드가 더 멋있는 경우가 많다.
한 마디로 요약하면, 문제를 풀기 전에 전체적인 outline을 잡고, 설명하면서 코딩하고, 여러 번 최적화 시키고, 남들의 코드와 비교해 보면 좋다
이전글: 코딩 인터뷰에서 고려해야 할 사항은 무엇인가?
Facebook: 소프트웨어 개발자 인터뷰
오랜만에 문제좀 풀어보려고 leetcode 해봤는데 반갑네요 ㅎㅎ
팔로우할게요~
감사합니다. 팔로우했어요. ^^