알고리즘 공부 방식

Jun·2021년 6월 27일
0

작년 말부터 학과 동기들과 스터디를 진행 중이다.
처음에는 웹과 알고리즘을 동시에 공부했는데 현재는 알고리즘만 하고 있다.
어제(26일) 알고리즘 공부 방식에 대해 2시간 정도 의논을 했고
그 생각을 정리하려 한다.

백준 단계별 풀기


위 사진은 백준 저지 사이트의 [문제] -> [단계별로 풀어보기] 의 분할 정복 단계의 문제들이다.
기존에 10단계(재귀)까지는 풀어두어서 스터디는 11단계(브루트 포스)부터 하게 되었는데
단계가 올라갈 수록 solved.ac 티어가 급격히 올라가는걸 볼 수 있다.

개인적으로 내가 현재 풀 수 있는 문제의 수준은 실버3이 최대라고 생각한다.
실버2 이상의 문제부터는 스택, 큐 구현 등 기존에 자료구조만 공부했다면
풀 수 있는 문제를 제외하고서는 거의 인터넷에 나와있는 솔루션을 참고했다.

그렇게 약 6달 정도 알고리즘 스터디를 진행하고 있었는데 플래티넘 문제를 풀어보고
낙담을 하게 되었다. 동적 계획법 문제를 풀면서부터 서서히 느끼던 감정이었는데
나에게는 너무 어려웠다. 결국 솔루션을 참고했지만 '가장 가까운 두 점' 문제는
아직도 완전히 이해하지 못 했다.

실력자의 조언

단계별 풀기에서 어떤 유형을 배우게 되더라도 복습을 하지 않으니 수 개월이 지나 다시 보게 되면 기억이 나지 않았다.
그래서 단계별 풀기만을 고집하지 않고 한 유형의 문제를 계속해서 풀어보는 방법도 괜찮겠다고 생각하는 찰나에 실력자의 조언을 보게 됐다. 코드포스 2400 이상
여러 커뮤니티의 의견을 종합해보고 내린 결론은 다음과 같다.

  1. 모르는 개념에 대한 공부를 먼저 한다. (세그먼트 트리, 비트 마스크 등)
  2. 그와 관련된 문제를 내 수준에 맞게 검색하여 많이 풀어본다.
  3. 언제나 중요하게 생각해야 되는 것은 '이 알고리즘이 어떤 상황에 사용될 때 가장 효율적인가?'

스터디원과 의논

백준 단계별 풀기에서 하루 한 문제씩 푸는 스터디를 진행하고 있는데
매주 토요일마다 모여서 어려웠던 문제에 대해 의견을 나누는 시간을 가진다.
나를 포함하여 3명이 진행하는데 한 명도 플래티넘 문제를 완전히 이해하지는 못 했다.
그래서 최근 생각하고 있던 것을 말했고 앞으로의 공부 방식에 대해 의논을 해봤다.

  1. 백준 단계별 풀기를 따라가되 시야를 넓히자는 의미에서 각 단계를 개념 공부 후 1~2문제만 풀어보고 바로 다음 단계로 넘어가며 전체를 빠르게 훑어보고, 그 다음 어려웠던 개념 위주로 문제 검색을 이용해 많은 문제를 풀어보자.
  2. 훑어보지 않고 지금까지 풀었던 문제 중 어려운 개념 위주로 많은 문제를 풀어보자.

이렇게 두 가지 의견이 종합되었다. 결론은 1안을 택하게 되었다.
6달 동안 스터디를 진행하며 이전에는 몰랐던 알고리즘을 많이 알게 되었지만
지금도 가끔 솔루션을 참고하면서 모르는 용어를 접하게 되는데
그래서 빠르게 시야를 넓히고 시작하자는 의견이 나오게 됐다.

다짐

단계별로 풀어보기 문제만 156문제를 풀었지만 아직 많이 부족하다고 느낀다.
각 알고리즘의 효율을 생각하며 지금 방법대로 잘 공부해서
좋은 방향으로 나아갔으면 좋겠다!

잡담

GitHub에 팔로우 되어있는 학교 사람들이 velog 를 많이 사용하길래 첫 글을 써봤다.
마크다운을 익힌 뒤로 가끔 Notion 이나 GitHub 에 글을 작성했었는데
velog 도 같은 방식이라 글이 깔끔하게 써져 마음에 든다.
알고리즘 문제를 풀다가 기억에 잘 안 남을 법한 내용을 정리하는 용도로 쓸 것 같다.
내 의지가 계속되도록 간절히 바란다!!

2개의 댓글

comment-user-thumbnail
2021년 8월 20일

잘 지내고 계시는군요 ! 항상 깃허브 보면서 자극받고 갑니다

1개의 답글