Divide and Conquer

알고리즘 공부를 하다보면 재귀(recursive) 쪽 파트에서 문제를 푸는 방법론으로 divide and conquer 라는 개념이 나온다. GeeksforGeeks에서는 divide and conquer 전략을 아래와 같이 설명하고 있다.

  1. Divide: This involves dividing the problem into some sub problem.
  2. Conquer: Sub problem by calling recursively until sub problem solved.
  3. Combine: The Sub problem Solved so that we will get find problem solution.

쉽게 말하자면 큰 덩어리의 일을 반복할 수 있는 작은 단위의 업무로 나눈 후 작은 업무들을 계속 처리하자는 전략이다. 듣기에는 굉장히 단순한데 이 전략을 코드로 표현하기엔 쉽지 않다. (재귀 문제를 볼 때마다 머리가 잘 안돌아간다.)


매년 실패하는 연간 목표

며칠 전 오랫동안 알고지낸 친구가 연간 목표 세웠냐며 연락이 왔다. 사실 연간목표를 구상하고 다이어리에 써봐야 안지킨 경우가 훨씬 많았기 때문에 언제부턴가는 연간 목표를 세우는 연례 행사를 아예 없애 버렸다. 물론 마음 속으로는 올해 이루고 싶은 것들이 있긴 하지만 수치화 하거나 명문화 해놓지는 않는다.

마음 속으로 그리고 있는 연간 목표라면 매년 나오는 책읽기와 취업준비, 특히 알고리즘 공부가 아닐까 싶다. 알고리즘 공부 관련해서는 너무 여러번 언급해서 이번 글에서 또 언급하는게 민망할 정도이나, 그만큼 신경을 많이 쓰고 있다는 반증이 아닐까. 사실 신경은 잔뜩 쓰나 과제, 알바 등의 이유로 꾸준히 못하고 있다. 코딩테스트 준비가 안되어 있으니 인턴쉽 찾는 것도 소극적이다. 곧 6월인데…


경험자의 조언

지난 주말에 여기서 알게된 분의 생일 파티에 참석하였다. 생일 파티에 참석했던 분 중 현재 개발자로 일하고 계신 분이 있었다. 그분 또한 문과 전공이었는데 졸업 후 bootcamp를 통해 코딩을 배워 미국에서 개발자로 취업한 케이스다. 외국인으로 미국 취업도 쉽지 않은데 전공까지 바꿔서 취업한 건 정말 대단하다고 느꼈다. 나 또한 취준해야 하는 입장이라 개발자와 관련한 이런 저런 질문을 던졌고 그중에 코딩테스트 이야기도 나왔다. 내가 바빠서 코딩테스트 준비를 꾸준히 하기 어렵다고 하자, 그분은 하루에 한문제만 풀라고 조언 해 주셨다. 평범한 조언 같은데 집에 돌아오면서 생각해보니, 내가 코딩테스트 준비를 해야지 해야지 하면서도 계속 미뤘던 이유가 코딩테스트 준비를 매우 큰 일로 여겼기 때문이었다. 하루에 두문제 혹은 세문제 풀려고 덤벼드니 오전 시간 전체가 날라갔고 그러다보니 바쁜 날은 건너뛰기 일수였다. 하루에 가볍게 한문제 정도만 푼다면 하루 최대 한시간 투자로 가능하며 감도 유지할 수 있어서 인터뷰가 언제 잡히더라도 많이 긴장하지는 않을 것 같다. 그래서 이번주부터 시도 중이며 매일 이 사이트에 올리고 있다.

하루 한문제 정도는 바쁜 날도 할 수 있는 것처럼 독서 또한 하루 한페이지만 읽는 것을 목표로 잡아보았다. 주로 아침에 일어나서 커피 끓일 때, 혹은 점심 시간 때, 그리고 잠자기 전에 폰을 보는 대신 책을 보고 있는데 효과가 매우 좋은 것 같다. 코딩 테스트와 달리 책은 한페이지 읽으면 두 세페이지는 금방 넘어가서 좋았다. 코딩테스트 한 문제, 독서 하루 한페이지… 가만 생각해보니 이 행동들은 divide and conquer 전략을 실생활에 적용한 것이 아닌가. 큰 일을 반복할 수 있는 작은 단위로 나눠 처리하면 결국 큰 일을 달성할 수 있을 것 같다.


달성 가능한 2021년 연간 목표

divide and conquer 전략을 써서 연간 목표를 세워보자면…

  • LeetCode에 있는 코딩테스트 문제 356개 풀기(매일 한문제)
  • 책 12권 이상 읽기(한달 한권, 한권에 300 페이지 정도라 가정하면 하루 10페이지 정도 읽으면 되겠다)
  • 명상하기(하루 5분만 가볍게 시도한다고 생각)

의지박약이라도 한해동안 이 정도는 충분히 할 수 있지 않을까? 반복할 수 없을 만큼 작은 단위가 아니라면 다시 조정해야겠다.

내일 data science 2 과목 mid-term exam이 있는데 난 왜 이 새벽에 이 글을 쓰고 있는지 의문이다. 내일 시험 잘보게 해주세요!!!