알고리즘 트레이닝 사이트인 백준은 'solved.ac'라는 서비스를 통해 문제의 난이도와 유저의 티어를 알 수 있게 했습니다. 유저의 티어는 'AC Rating'을 계산하여 레이팅 컷에 따라 티어를 결정합니다.
프로그래밍 언어는 웬만큼 하지만, 알고리즘은 하나도 모른 상태로 코딩 대회에 나갔었습니다. 문제 이해도 안 되며 처참하게 예선에서 탈락하고 온 후 알고리즘을 배워야겠다 생각이 들어 시작하게 되었습니다.
뭔 말이여
처음에 코드업으로 시작했다가 백준도 같이 하게 되었는데 백준은 티어가 있어 더 자주 하게 되었습니다. 문제를 푸는 데 여러 우여곡절이 있었지만 점점 티어 올라가는 재미도 있어서 하루에 한번씩은 문제를 풀려고 했던 것 같습니다. 앞으로 더 열심히 공부해서 알고리즘을 마스터하고 대회 입상도 노려보겠습니다.
저의 골드 진입 방식은 이러합니다.
알고리즘 문제들을 풀기 위해서는 프로그래밍 언어를 익혀야 합니다. 저는 시간에서 불리하지만 알고리즘 구현이 쉬운 파이썬을 선택했습니다. 파이썬이나 C언어를 선택하셨다면 코드업의 기초 100제 문제들이 좋으니 배우면서 풀어보시면 좋습니다.
'solved.ac'의 새싹 문제들은 백준 환경과 프로그래밍 언어 사용에 적응하도록 만든 쉬운 문제들입니다. 코드업의 기초 100제와 비슷한 난이도니 문제를 풀면서 새로운 환경에 적응하시면 되겠습니다.
자 이제부터 본격적으로 알고리즘 풀이가 시작됩니다! 백준에는 어떤 문제를 풀 지 모르겠는 분들을 위해 '단계별로 풀어보기'라는 곳이 있습니다. 들어가면 제일 쉬운 '입출력과 사칙연산'부터 제일 어려운 '매우 어려운 자료구조와 알고리즘'까지 있습니다. 저는 11단계인 '정렬'부분까지를 풀었습니다!
이제부터 문제를 풀 때 모르는 문제들이 나올 수 있습니다. 이럴 때는 사람 특성(?)에 따라 다르게 해야하는데요. 일주일을 넘기며 계속 고민하며 풀다가 너무 모르겠으면 패스하는 것이 맞는 사람들도 있고, 1시간을 집중했는데도 안 풀리니 그냥 답을 보는 것이 맞는 사람들도 있습니다. 저는 하루만 고민해보고 안 되면 검색해보거나 힌트를 구합니다. 자기가 이 문제를 완벽히 머리에 담을 수 있도록 방식을 잘 선택해야 합니다.
'solved.ac'에는 자주 나오는 주제들을 모아놓은 '클래스'가 있습니다. 클래스는 1단계부터 10단계까지 있습니다. 클래스마다 난이도 격차는 좀 있는 편이니 지금은 클래스 1++까지 풀어볼 것입니다. 자신이 푼 클래스에 따라 티어에 영향을 주니 어느정도 공부가 되었을 때마다 클래스를 확인하고 풀 수 있는 문제들을 풀어봅시다!
클래스 1은 브론즈, 새싹 문제들이 나오고 많은 문제들이 이미 풀려있을 것입니다. 몇 문제만 더 풀어서 금방 클래스 1++을 달성할 수 있습니다.
'코드플러스'는 백준을 만든 스타트링크의 강의사이트입니다. 그럼 강의를 사야되냐고요?? 아뇨, 저희는 나와있는 문제들을 풀 것입니다. 링크로 들어가서 내려가면 '포함되어 있는 문제'가 나올 것입니다.
'알고리즘 기초 1/2'에서는 자료구조1, 수학1, 다이나믹 프로그래밍1을 다룹니다. 확실히 '단계별로 풀어보기' 때보다 어려워지고 고민도 많이하게 될 것입니다. 이 문제들을 풀다보면 '다이나믹 프로그래밍1'의 중간에서 골드를 달성하게 됩니다. 모르는 개념이 있다면 검색해야 합니다. 챕터마다 제목이나 볼드 처리된 설명을 검색하여 해당 개념들을 공부하고 문제를 푸셔야 합니다. 제가 생각하는 필수적으로 공부해야 할 것들입니다.
골드를 달성하고 나서도 아직 많이 멀었다는 느낌이 듭니다. 앞으로도 머리를 쥐어짜면서 알고리즘 문제들을 열심히 풀겠습니다. 감사합니다!
+ 추가 : 얼마 전 plzrun 님의 '알고리즘 문제풀이(PS) 시작하기'라는 글을 보고 유익해서 공유합니다.