포스팅을 하지 않은지 너무 많은 시간이 지났다.
이 글을 계기로 다시한번 주기적인 포스팅의 의지를 다져야겠다.
사실 Solved.ac 플레티넘 티어를 달성한지는 꽤 오래되었다. (2023년 1월 달성)
물론 이 티어라는게 실력을 입증하는 자료도 아니고, 높은사람이 무조건 알고리즘문제를 잘푼다는 것도 아니다.
또 플레티넘이 대단한 티어인가 하면 그건 더더욱 아니다.
하지만 티어라는게 목표를 잡고, 꾸준히 알고리즘 문제를 풀 수 있게해주는 원동력이 되는 것은 확실한 것 같다.
이번 글에서는 내가 플레티넘을 달성하는 동안 어떤식으로 공부를 하였고, 어떻게 생각하는지 글을 써내려가 보겠다.
플레티넘을 달성한지는 반년이 넘었고, 그 뒤로는 알고리즘 푸는 것에 좀 소홀해지기도하고, 점수가 올라가려면 고난도의 문제를 풀어야해서, 대회가 아닌 코딩테스트가 목적인 나로써는 지금은 티어에 별로 연연하지 않고 있다.
🚀문제를 뭘 풀어야하나요?
맨처음 시작할 때에는 학교 알고리즘 수업에서 배운 지식들이 있었지만, 실제로 문제푸는데에는 적용해본 적이 없고, 어떻게 시작할지 막막했다. 그래서 맨처음에는 Solved.ac에서 제공하는 CLASS문제를 한문제도 빠짐없이 모두 풀었다.
개인적으로 지금 생각하기에는 CLASS문제에 양질의 문제가 엄청 많은 것 같았다. 다양한 알고리즘을 경험해볼 수 있는 문제들이 많다.
나는 CLASS 1~5까지 모두 풀었지만 기본적인 베이스가 있는 사람이라면 1, 2는 뛰어넘어가도 좋다고 생각하고, CLASS 4까지는 꼭 풀어보길 추천한다. 좋은 문제가 많은 것같다. 여기서 조금더 해보고싶다면 5까지는 풀어볼만 하다고 생각되고, 6부터는 코딩테스트 목적이라면 조금 범위를 벗어나는 것 같다고 개인적으로 생각한다.
그러면 클래스 문제를 다 풀고나면 어떤 문제를 풀어야할까?
그때부터는 이제 개인적인 선택이다. 백준 사이트에 들어가서 자신에게 맞는 문제집을 찾거나, 랜덤디펜스를 하거나(solved.ac 검색창에 *s3...g3이라고 검색하면 s3부터 g3문제까지 모두 나오고, 그걸 섞어서 랜덤으로 푸는 것을 말한다), 아니면 프로그래머스와 같은 다른 알고리즘 사이트의 문제를 푸는 방법도 있겠다.
클래스의 문제를 제대로 학습했다면, 어느정도 기본은 잡혀있기에, 문제선택에 큰 어려움이 있을것 이라고는 생각치 않는다.
🚀알고리즘 문제 학습법
먼저 백준문제를 풀때 나는 티어와 태그를 모두 가려놓는 편이다.
이런식으로 티어를 가려놓는 이유는 티어가 보이면 괜히 문제에 고정관념이 생긴다. 예전에 티어를 켜놓고 했을 때, 되게 쉽게 푸는 방법이 떠올랐는데, 골드 상위문제가 이렇게 빨리 떠올라도 되는건가하면서, 괜히 편견이 생기고 그런 경험이 엄청 많았다. 그런데 막상 티어를 꺼보고 풀어보니 엄청 어려웠는데 실버문제인 경험도 있었고, 엄청 쉽게 풀었는데 골드 상위문제인 것도 있었다. 어차피 우리가 코딩테스트를 볼 때에는 문제에 저런 정보는 없다.
따라서, 문제를 다 풀었으면 재미용도로 티어를 보는 것은 좋지만, 풀기 전에는 티어는 키지 않는 것을 추천한다. (이를 위해 맞은 문제에 대해서만 티어표시 켜기 옵션을 결정했다.)
태그는 어떤 알고리즘을 사용해서 풀 수 있는지를 적어놓은 것인데, 결국 코딩테스트에서 문제를 직면했을 때, 어떤 알고리즘을 사용해서 풀것인지 결정하는 것 부터가 실력이라고 생각하는데, 이런 정보가 있어버리면 학습에 방해되기 쉽다.
다른 건몰라도 티어끄는건 확실히 추천한다.
그런데 모든문제를 저렇게 풀 수 있으면 좋겠지만 현실은 그렇지 않다. 당연히 풀다가 막히는 문제가 있을 것이고, 아무리봐도 모르겠는 문제가 많을 것이다.
그래서 나 스스로 정한 룰이 있는데 지금부터 소개하겟다.
1. 문제를 보고 고민한다.
2. 도저히 방법이 떠오르지 않으면 태그를 열어서 어떤 알고리즘을 사용하는지 확인한다.
2-1. 알고리즘이 처음보는 알고리즘이나, 학습이 덜된 알고리즘이라면 학습 후 다시 시도한다.
3. 태그를 보아도 모르겠으면, 질문 게시판을 뒤적거리며 힌트를 조금얻는다.
4. 이래도 모르겠으면 정답코드를 보고 학습한다.
우리는 코딩테스트를 준비하는 것이 목적이기 때문에, 정답을 보는 것에 엄청난 반감을 가지지는 않아도 될 것 같다. 나는 아예 감이 안잡히는 문제라면 30분~1시간 고민해보고 잘 모르겠으면 주저없이 정답코드를 보고 학습했다. 물론 정답코드를 눈으로 슥보고 복붙하라는 것은 아니다.
🚀문제를 푼뒤
문제를 다 풀고나서는 정리하는 시간을 가지는데, 따로 글로 정리하거나 그렇게 하지는 않았다.
먼저 다른사람의 코드를 많이 보는 편이다. 보다보면 이런식으로도 접근할 수 있구나 하면서 다음에 써먹어볼 수도 있고 시각을 넓혀준다.
그 다음 노션을 이용해서 나중에 보면 딱 떠오르게 한줄정도의 코멘트만 달아놓는 식으로 정리했다.
이런식으로 문제들을 아카이빙 해서 모아두었다. 그러면 나중에 보기도 편하고 검색하기도 편해진다.
🚀마치며
백준 플레티넘이란 것이 대단한 티어도 아니고 나 스스로도 내가 알고리즘 문제를 잘 푼다고 생각하지 않는다. 하지만, 맨처음 목표로 삼았던 티어를 달성하였고, 이 티어를 달성하는 과정에서 내가 스스로 정립했던 공부법과 같은 것들을 소개해보고자 글을 적게 되었다. 물론 이 외에도 내가 몸으로 느낀 것들이 많지만, 이것을 이 자리에서 모두 소개하기엔 글이 너무 길어질 것 같아 전체적인 것만 이야기 해보았다.
나의 방법이 무조건 맞다고 생각하지 않고, 다 개인마다 각자의 맞는 방법이 있을 것이다. 그냥 참고할만한 건 참고하고 별로인 것 같으면 이 사람은 이런식으로 공부했구나 생각해주시면 감사할 것 같다.
게임개발자를 꿈꾸는 대학생의 개발 공부 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!