2021년 4월 11일

시작

컴퓨터를 공부하는 대부분의 사람처럼 나도 예전부터 알고리즘 공부에 대한 필요성을 느끼고 있었다. 하지만 그것을 실천으로 옮기는 것은 어려웠다. 나는 대학교 입학 전부터 백준 온라인 저지의 존재에 대해 알고 있었으므로 그리 늦은 편은 아니었지만, 1학년 1학기를 마치고, 군 복무를 마친 1월 중순까지도 진행된 것은 없었다. 아마 solved.ac 기준 Bronze등급 정도의 문항을 50개 정도 해결한 것이 전부였을 것이다.

알고리즘 문제 풀이(이하 PS)를 공부하는 것이 정말 가치가 있는가에 대해 어떤 논의가 오가는지는 알고 있었고, 나도 약간은 회의적인 입장이었다. 하지만 이것을 아예 무시하고 넘어갈 수는 없었다. 분명 언젠가 어떤 형태로든 PS 능력이 필요한 순간이 올 것으로 생각했고, 복학 전까지의 이 시기가 기본기를 준비하는 데에 가장 적합하다고 판단했다. 어떤 공부든 시작하는 것이 지속하기보다 훨씬 어렵기에, 그 어려운 시기를 앞당겨 겪고자 한 것이다.

성과

과정에 대해 돌아보기 전에 성과부터 살펴보자. 이 글을 쓰고 있는 2021년 4월 11일에 총 294문항을 해결하여 solved.ac 기준 Platinum V 등급을 달성했다. 약 1달 전인 3월 1일에는 총 214문항을 해결하였고 Gold III 등급이었다. solved.ac에 계정을 등록한 것이 3월 1일이라 그 이전 기록은 없는 것이 아쉽다.

solved.ac 프로필

아래 내용을 고려하였을 때, 앞으로 어떤 방향으로든 공부를 이어나갈 수 있는 발판을 마련하였다는 점에서 소기의 목적을 달성하였다고 생각한다.

  1. 지금까지 294문항을 해결하면서 학부 수준의 알고리즘 및 자료구조 수업에서 등장할 수 있는 대부분의 주제를 학습하였다.
  2. 개발자 채용 면접 또는 테스트에서 등장하는 문항의 난이도는 대부분 Gold 수준이다.
  3. 교내 PS 동아리는 초급, 중급, 고급으로 나누어 스터디를 진행하는데, 고급반의 자격 요건이 Platinum V 등급이다.

과정 및 반성

PS도 역시 다른 영역의 공부와 비슷한 경향이 있다. 이론적 공부에 집중하기보다는 실제 해보면서 배워야 한다는 것이다. 심지어는 예시 코드를 이해하지 못하고 복사하여 일부분만 수정해 제출한다고 할지라도 그 과정에서 해당 알고리즘과 자료구조에 더 익숙해지기 때문에 시간이 지나면서 많은 것이 자연스럽게 얻어진다.

이러한 생각을 바탕으로 알고리즘 문제해결 전략, 알고리즘 트레이닝 등의 도서를 발췌독하고, 몇몇 강의의 도움을 받으면서 최대한 빠르게 다양한 주제를 학습하는 것을 목표로 지금까지 공부해왔다.

지금까지의 공부를 바탕으로 잘한 점, 개선해야 할 점, 앞으로의 계획을 정리하자면 다음과 같다.

잘한 점

  1. PS는 재밌을 때도 있지만 짜증 나고 고통스러운 순간도 많다. 그럼에도 거의 매일 최소 1문제는 해결하면서 공부를 포기하지 않았다.
  2. 정해져 있는 과정을 따르려고 하거나, 완벽함을 추구하지 않고 인출 중심, 빠른 피드백 중심으로 학습하였다. 이것은 요즘 공부하고 있는 애자일 철학과도 관련 있는데, 이번에 확실히 그 중요성을 느꼈다.

개선해야 할 점

  1. 결과적으로는 일찍 방향을 잘 틀었지만, 초기에는 책의 커리큘럼을 그대로 따라가려고 하거나 일부 주제에서 너무 시간을 끄는 모습을 보였다. 앞으로 어떤 것을 학습하든 이러한 패턴은 피해야 한다.
  2. 풀어야 하는 문제를 먼저 정하고, 그것을 해결하기 위한 공부를 하는 것이 바람직한데, 그동안은 그렇게 해오지 않았다. 의도적으로 이러한 패턴을 따라야 인출 중심, 빠른 피드백 중심의 학습에 더 가까워질 것이다.

앞으로의 계획

  1. 개선할 점들을 반영하여 아직 공부하지 않은 일부 주제들 학습하기.
  2. Gold 상위 ~ Platinum 하위 정도의 문제 꾸준히 풀기.
  3. Codeforce 정기적으로 참여하기.
  4. 더 깊게 학습하여 대회를 준비하는 것은 아직 계획에 없음.