프로젝트 구성하기
Today I solve(이하 TIS)는 매일 하나 이상의 문제를 고민하고, 고민한 것을 기록하는 프로젝트로, 같은 회사 동료인 KD가 하고 있는 TIL(Today I Learn)의 이야기를 듣고 영감을 받아 시작하게 되었다.
What to solve?
책 Cracking the coding interview으로 TIS를 진행하기로 했다.
Problem Solving skills가 중요한 건 개발자들이라면 다 알 것이다. 구글, 아마존... 등 실리콘 밸리의 글로벌 IT기업에서 인재를 채용할 때 맨 처음 테스트하는 것이니까 말이다. 카카오도 블라인드 테스트로 첫 신입 공채를 진행했고, 카카오 수시 채용 진행 중인 한 후배에게도 면접 때 위와 같은 문제를 손 코딩시켰다는 이야기를 들었다.
요약하면, 거대하고 수많은 현업의 문제들의 축소판이고, 논리력/사고력이 키워지면서 문제들을 잘 풀어내기 위한 기본 소양을 갖출 수 있다. 선택한 책은 Problem solving skills에 대한 '수학의 정석'과도 같은 책이다. 사둔지는 꽤 되었지만, 혼자서 간간히 노트에 풀다 보니 작심삼일이 되곤 했다. 어떤 날은 이 노트, 어떤 날은 저 노트에 기록하고 작심삼일이 되었다.
기록하는 걸 좋아하는 나에겐 꾸준하게 기록할 공간이 필요했다. 하여, 작년쯤에는 깃헙에서 제공하는 GIST에 해커 랭크 문제들의 솔루션들을 올려놓고는 했었는데, 카테고리별로 정리할 수가 없었대. 하여, TIL의 방식을 채택하여 repository를 새로 구성하고, README.md만을 이용하여 구성해보기로 했다.
(마크다운을 안다면 아래 단락은 건너뛰자!)
README.md는 마크다운 문법으로 구성된다. 마크다운에 대한 정의는 다음과 같다.
Markdown is a text-to-HTML conversion tool for web writers.
Markdown is a way to style text on the web.
요즘은 IT업계 종사자들은 직군에 관계없이 많이 쓰고 있는 추세이다. 우리 회사의 커뮤니케이션 툴인 아지트만 봐도 그렇다. 마크다운을 알면 내 글을 더 예쁘게(?) 꾸며보고 강조할 수 있다.
아래는 마크다운으로 구성된 위 README.md의 민낯이다.
마크다운 작성법을 모른다면 https://guides.github.com/features/mastering-markdown/를 참고하면 좋다.
How to?
TIS 진행에 대한 규칙은 다음과 같다.
진행 방법
- 매일 하루에 한 문제씩 고민하기
1. 테스트 케이스 생성
2. brute-force 한 로직이더라도 손으로 써본다.
3. 로직 리팩토링 혹은 다른 접근 법의 솔루션을 고민
- 솔루션이 도출될 경우 Github에 작성
1. 문제
2. 제약조건(제약조건이 없으면 모든 케이스에 대비해야 하고, 공격 질문받기 좋다)
3. 해결 방향 간단 설명 + 코드 + 공간/시간 복잡도
* 공간/시간 복잡도에 대한 Big-O Algorithm Complexith Cheat Sheet를 참고해도 좋다.
아래는 둘째날쯤 푼 문제로, 참고차 가져왔다.
회사를 다니면서 하루에 한 문제를 고민하기가 생각보다 쉽지 않다.
모든 것은 꾸준함이니, '하루에 한 문제'보다는 노력한 시간에 가중을 두는 것이 심신 안정에 좋을 듯 :)
언젠가 잘 될 거야-!