[알고리즘 공부팁] 3. 알고리즘 대회에 벗어나 의미있는 공부하기

[알고리즘 공부팁] 3. 알고리즘 대회에 벗어나 의미있는 공부하기
Photo by Shaurya Sagar / Unsplash

알고리즘, 어떻게 공부할까?

지난 토요일에 서울시립대학교 제 3회 교내 알고리즘 대회에서 발표를 하고 왔습니다. 우선 저를 불러주신 운영진분과 잘 들어주신 시립대 분들에게 감사의 인사를 전합니다.

발표를 준비하고, 다른 분들과 대화하면서 생각이 난 내용을 적어보려고 합니다.

이번 발표의 포인트는 '어떻게 PS를 했어야할까?' 였습니다. 발표하고 이 글을 쓰다보니 새내기의 저, 본인에게 만족하지 못했던 지난 3년의 저에게 말하고 싶었던 말이네요. 이번글도 알고리즘을 잘하는 분들은 쓱 넘어가시면 됩니다 :)

1. 즐기는 공부를 할 것인가? 잘하고 싶고, 대회에 좋은 성과를 내고 싶은가?

알고리즘 문제를 처음 풀면 재미있는 부분이 많습니다. 보통 이런 시작으로 대회를 준비하는 분들이 많습니다. 하지만 오랜 기간동안 ps만을 즐기기만 한다면 실력이 늘지 않습니다.

PS를 즐기는 분들의 다수는 '공부 편식'을 합니다. 공부 자체가 편식을 하기 쉬운 분야입니다. 자기가 잘하는 것만 하고 싶고, 취향에 맞지 않는 부분은 피하기 마련입니다. 하지만 이렇게 오랜 시간 공부를 즐기다보면 시간 투자 대비 성장하지 않는 본인을 느낄 수 있을 것입니다. 물론 한 분야에 전문가가 되는 것은 좋지만 대회를 잘하고 싶다면 이래서는 안됩니다.

대회를 잘하고 싶고, 성장을 하고 싶다면 싫은 공부를 해야합니다. 하기 싫은 분야는 개념만 알고 넘어가는 경우가 많습니다. 그렇기에 나중에 개인 대회에서는 꽤 기초 알고리즘이지만 코딩을 못하는 경우가 생깁니다.

단순 연습도 마찬가지로 필요합니다. 잘하고 싶다면 하기 싫은 알고리즘을 공부하고, 하기 싫은 구현 연습을 반복해야합니다. 본인이 천재가 아니라면 싫은 걸 하세요. 인생은 토끼와 거북이가 아니었습니다. 재능이 있는 분들이 더 열심히 하고 있습니다. 적어도 열심히 안하는 천재는 이겨봐야지 않을까요 :)

2. 대회 성적이 안나와서 좌절한다면?

대학에 들어와서 알고리즘 대회를 준비하는 분들 중에는 대회에 성과가 안나와서 스트레스 받는 분들이 꽤 많을거라 생각합니다.

알고리즘 대회는 국내에 얼마 없습니다. 심지어 원하는 성과를 얻지 못하면 남는게 없어보이는 순간들이 있습니다. 왜 난 남들보다 못하지? 왜 난 재능이 없지? 라고 생각할 수도 있습니다.

알고리즘 대회는 고여있습니다. 지난 4년간 알고리즘 대회를 다녔지만 보이는 얼굴은 매우 비슷했습니다. 아마 앞으로도 계속 그럴거라고 생각합니다. 정보올림피아드 출신 고등학생들이 졸업하고 대학교에 오면 일반적으로 대학와서 프로그래밍을 처음하는 분들에 비하면 실력차이가 엄청날 수 밖에 없습니다. 심지어 과학고/영재고에서 수학올림피아드를 준비하던 분들이 이 분야에 오면 또 실력차이가 납니다.

재능도 분명 차이가 있겠지만 이미 준비한 양이 다르고, 시작점이 다르다는 것입니다. 그렇기에 대회 성적을 목표로 잡아서는 심신이 지칠 수 밖에 없습니다. 그런 만큼 저는 알고리즘 대회를 준비하는 분들은 좀 더 본인만의 PS 공부를 생각하면 좋겠다고 생각합니다.

PS로 앞으로 진로가 결정되는 사람은 매우 일부분입니다. 코딩으로 더 성장하고 싶다면 PS가 아니라 어떤 개발자가 될 것인가를 고민하는 시간이 필요하다고 생각합니다.

3. 그렇다면 어떤 부분을 고민하고, 어떻게 더 의미있게 PS를 할까?

  • C/C++로 PS하는 분들 중에 C++을 class를 짜고, 객체지향프로그래밍을 하고 있는 분들은 얼마나 될까요? 본인의 시간을 낭비하지 않기 위해서는 본인이 사용하고 있는 언어를 얼마나 활용하고 있는지 고민해보세요.

  • PS로 성과를 내는 건 상당히 어려운 일입니다. 또한 본인의 가치를 어필하고, 키우는 방법은 실력만이 아닙니다. 그렇기에 꾸준함을 기록하는 것, 운영진/출제진을 해보는 것, 네트워킹 등을 통해서 더 의미있는 가치를 만들기 위해 노력하면 좋을 것 같습니다.

  • 발표에서는 이야기 못했지만, PS는 문제 풀이 생각 과정, 디버깅 등 개발에 필요한 능력을 함양할 수 있는 시간입니다. 그 부분을 훈련한다고 생각하고 그런 부분에 초점을 둬서 공부를 하면 나중에 다른 개발 분야에서도 그 역량을 사용할 수 있을겁니다. 저는 ML/DS와 웹 개발에서 충분히 도움이 됬습니다.

  • 작은 성과들을 즐기세요. 제가 그래도 아직까지 개발을 즐길 수 있는 이유 중 하나는 알고리즘 사이트에서 문제수로 1페이지에 들어갔던 그 순간 등 크고 작은 성과를 기록하고 즐겼기 때문입니다. 본인 스스로 성과를 냈다 라고 여기는 것이 중요합니다.

  • PS는 개발의 일부분입니다. 아니 어쩌면 개발의 일부가 아닐 수도 있습니다. 알고리즘 실력으로 본인을 낮추어 생각하지 마세요.

이상으로 알고리즘이 좋았고, 스스로를 만족하지 못했던 과거의 저에게 하고 싶은 말이었습니다. 다시 한 번 시립대분들에게 감사합니다.