Fundamentals/Algorithm

알고리즘 공부에 대한 생각

grayroom 2022. 2. 19. 07:40

아르바이트를 하다가 문득 든 생각이 있다. “나 알고리즘 공부 왜 하고있는거지?”

 

배경

처음 시작은 대학 동기가 백준을 추천해준것 부터였다. 그땐 C언어를 처음 배울때라 문법을 익히는데 도움이 되겠지 하고 풀었고, C++를 접할쯤엔 STL을 활용해보는데 의미를 두고 풀었던것 같다. 그냥 간단한 문제들만 풀어본게 전부라서 복잡한 문제를 풀어본적은 없었다. 군대에서 상병을 달았을 때 쯤 심심해서 본격적으로 시작해본 PS는 생각보다 더 어렵고 심오한 문제들이 득실득실했다. 그때쯤 solved.ac이라는 서비스도 생겨서 레이팅을 올리는 재미로 변태알고리즘 몇개를 공부해서 플레티넘까지 티어를 올린것에 나름 만족하고 있던 때이었다.

 

지금은 플레티넘4 1800점대의 점수를 갖고 있는데(지금 확인해보니 1844점이다), 문득 PS를 좀더 제대로 해보고싶다는 생각이 들었다. 특정 알고리즘을 공부해서 점수를 얻는게 아니라, 깊은 관찰과 논리를 통해 문제를 풀어내는게 PS를 공부하는데 더 의미가 있을것 같기 때문이다. 뭔가 성과를 만들어내려면 시간내에 기본 구현에서 벗어난 복잡한 알고리즘 문제를 풀어내는 능력이 필요할 것 같기 때문이다. 

궁극적으로는 UCPC, ICPC, SCPC와 같은 알고리즘 대회에서의 성과, 알고리즘 공부를 토대로 길러낸 논리적 사고능력과 구현능력을 개발역량으로 녹여내는 그런것이 필요하다고 절실히 느꼈다.

 

공부방향 & 목표

그래서 졸업하기 전 2022/2023년에는 좀더 방향성을 가지고 알고리즘 공부를 해보려한다.

 

올해의 목표는 최대한 많은 대회를 참여하며 풀이능력을 기르는것이다. 참여하고자 점찍어둔 대회는 google hashcode(2월), SCPC(7월), UCPC(7월), ICPC(10월)정도이고, 사이사이 열리는 open contest와 codeforces 대회들이 그 대상이다. 알고리즘 공부는 책과 인터넷을 참고해서 할 것 같은데, 일전에 사둔 CLRS(Introduction to Algorithms), 알고리즘 문제해결전략 이 두권의 책과, 아직 본적은 없지만 programming challenges, the art of computer programming이라는 책도 참고해 볼 만 한것같다. 문제를 보고 어떤 알고리즘으로 풀 수 있을지 판단하는 능력, 웬만큼 잘 알려진 대회용 알고리즘을 익히기, 구현능력 이런것들을 기르는데 주안점을 두려 한다. solved.ac레이팅을 올리는것도 동기부여가 되겠지만 위의 목표들을 우선으로 생각하고 공부하도록 하자.

 

교내 알고리즘 대회?

우리학교에도 다른 학교들처럼 교내 알고리즘 대회가 있었다면 참 좋겠다 생각했었는데, 학교에 입학한지 5년이 되어가는 올해까지도 없는걸 보면 내가 만들어야하나 싶다. 목마른사람이 우물판다는 옛 격언처럼 대회가 하고싶으면 직접 만들면 되지 않을까? 대회 수준이나 규모가 어떻든 일단 만들어서 2년정도 하고나면 관심을 가지고 공부하는 사람도 생길것이고, 대회를 이어나갈 사람 한명정도는 생기지 않을까? 이런 생각으로 일단은 올해 1학기에 동아리 알고리즘 대회를 작게나마 열어볼 생각이다. 문제 출제나 검수같은 과정에 심각한 제한사항이 없다면 2학기에는 규모를 교내대회로 넓혀서 영광의 제 1회 교내 알고리즘 대회를(KCPC...)열어볼 계획이다. 대회를 열고 차질없이 진행하려면 그에 걸맞는 알고리즘 이해능력이 필요할 것이 틀림없기 때문에... 당분간은 정말 열심히 공부할 동기가 되지 않을까 싶다.