1. 백준 온라인 저지
아마 많은 분이 가장 쉽게 접하고 많이 애용하는 사이트이지 않을까 싶습니다. 백준의 특징이라고 한다면,
- 전체 문제 수만 2만여 개
- C, JAVA, Python뿐만 아니라 Ruby, C#, Go, Kotlin 등등 매우 다양한 언어를 지원
- 문제마다 난이도가 표시되어 있어 맞춤형 학습이 가능 (브실골부터 플래, 다이아 ...)
- 플랫폼 이용자 수만큼이나 아주 활발한 풀이 및 정보 공유
제가 생각하는 백준의 가장 큰 장점은 문제들의 범주와 난이도가 아주 다양하여 본인이 달성하고자 하는 목표 수준에 맞춰 학습이 가능하다는 점입니다.
초보자들은 간단한 입출력, 연산 문제부터 맛을 들일 수 있구요. 취업을 노리시는 분들은 기출 유형인 DFS/BFS, 다이나믹 프로그래밍, 이분탐색 유형 등의 문제만 수천개를 푸실 수 있으며, 더 나아가, 큰 대회를 준비하는 사람들을 위해 고난도의 알고리즘/수학 문제들이 준비되어 있습니다.
수많은 이용자가 있다 보니 자연스럽게 서로 경쟁하는 분위기도 만만치 않은데요, 문제를 더 많이 풀고 높은 난이도에 도전하면서 저 자신에게도 크게 자극을 주었던 기억이 남습니다.
2. Codeforces
영어와 러시아어만 지원되는 커뮤니티라 국내에서의 인지도는 좀 낮은 편이지만, 진짜 영어만 할 줄 안다면(!) 가장 BEST 라고 꼽고 싶습니다. Codeforces의 특징으로는
- 상당한 양질의 문제들, 사고력을 요구하는 문제들이 포진되어 있으며, 간단한 구현/입출력이나 넌센스 문제가 거의 없음.
- 주기적으로 온라인 경진 대회 개최 (다만 시간대가 주로 밤 10시 이후)
- 자연스럽게 영어 독해 실력도 향샹
특히, 온라인 경진 대회는 꼭 참여를 권하고 싶습니다. 대기업이나 학교 차원에서 개최되는 오프라인 대회보다 접근성도 좋고, 개개인의 실력에 따라 division이 나뉘기에 부담 없이 온라인 경진 대회에 도전할 수 있습니다. 보통 2시간 정도의 풀이 시간을 주고 5~6문제를 출제하는 편인데요.
이 대회의 가장 큰 묘미는 통칭 'Hack'이라는 룰입니다. 본인이 해결한 문제에 한해서 다른 경쟁자들이 같은 문제를 어떻게 풀었는지 보면서 오류를 찾아내고 반례를 제시할 수 있습니다. 이 시도가 성공하면 추가점수를 주기 때문에 문제를 푸는 와중에도 다들 이 악물고 남의 코드의 허점들을 찾아내기에 바쁩니다.
Hack은 단순 규칙을 넘어서 참여자들에게 도움이 많이 되는 시스템입니다. 다른 사람들의 코딩 스타일, 문제 해결 전략들을 눈여겨보게 됨으로써 자신의 코딩 습관들을 개선하고 노하우들을 습득해 나갈 수 있기 때문이죠. 1~2주마다 열리는 대회들을 꾸준히 접하다 보면 나름대로 변화를 많이 느낄 수 있습니다.
3. 프로그래머스
프로그래머스는 실력 향상보다는 당장의 취업 준비에 특화된 문제들을 제공합니다. 연습 문제만 풀 수 있는 게 아니라, 실제로 여러 IT기업들의 온라인 코딩 테스트가 해당 플랫폼에서 이뤄지고 있다고 하네요. 프로그래머스의 특징으로 말하자면,
- 대기업 (대표적으로는 카카오) 코딩테스트 기출 문제 일부 수록
- 알고리즘 문제 이외에도 SQL 쿼리 문제도 제공
- 난이도별로 모의 코딩테스트 가능
코딩테스트에 초점이 맞춰져 있다보니 출제 문제 유형이 매우 한정적인 편입니다. 어지간해선 해쉬, 정렬, 스택, 아니면 DFS/BFS 정도에 그치고 그 이상의 알고리즘 문제는 거의 없다시피 합니다. 다만 알고리즘 문제와는 별개로 SQL 문제도 다루고 있기에, 데이터 사이언스 계열 직군을 노리는 분들에게도 큰 도움이 될 것 같습니다.
아쉬운 점이라면 연습 문제 수가 매우 적습니다. SQL 문제집은 날 잡고 풀면 하루 만에 다 해결하는 사람들도 생기지 않을까 싶네요... 단기적인 알고리즘 공부에 초점을 두는 것이 아니라면 앞서 언급한 백준 온라인 저지 또는 Codeforces를 이용하는 것을 추천해 드립니다.
4. 구름 LEVEL
프로그래머스와 상당히 유사한 느낌의 알고리즘 사이트입니다. 솔직히 UI나 문제 분류 같은 여러 부분이 프로그래머스와 다를 게 없긴 하지만, 문제 수나 지원하는 언어 종류는 오히려 구름LEVEL이 더 많은 편입니다.
특히, 프로그래머스는 고난도 (Level 4 이상) 문제들의 비중이 다소 적은 편인 데 비해 구름LEVEL은 문제 난이도 배분이 잘 되어 있는 편이라고 생각합니다. 개인적인 생각으로는 온라인 강좌 플랫폼인 goorm에듀도 동반 성장함에 따라 나중엔 구름LEVEL 플랫폼이 더 커질 수도 있지 않을까 하네요.
5. Topcoder
https://www.topcoder.com/community/arena
마지막으로 소개해드릴 사이트는 Topcoder입니다. Topcoder는 'SRM'라고 불리는 온라인 알고리즘 경진대회를 격주마다 개최하고 있습니다. 점수 체계나 대회 룰은 Codeforces와는 상이할 수 있으나 본질은 똑같습니다. 문제를 최대한 빨리 풀고, 다른 사람의 코드에서 잘못된 부분을 찾아내는 것입니다.
Codeforces는 문제 풀이와 Hack이 동시에 이뤄지지만, Topcoder는 문제들을 푸는 시간이 먼저 주어지고 잠깐의 휴식 시간 이후에 Hack을 시작한다는 정도의 차이가 있습니다. 초기에는 'ARENA'라는 프로그램을 따로 설치해야만 대회에 참가할 수 있고 UI가 좀 별로라서 불편함이 있었는데요, 요새는 웹 인터페이스에서도 직접 참여할 수 있게 해놨나 봅니다 (다만 베타버전이라 안정화가 덜 된듯합니다...) 나름 역사도 오래되었고 그만큼 이전에 낸 좋은 문제들이 대거 수록되어 있기에 굳이 SRM을 하지 않더라도 연습 삼아 알고리즘 문제들을 풀어보는 것을 권합니다.