한국에서 PS를 공부하기 위한 방법은 여러가지가 있습니다. 크게 나누어서 돈을 많이 쓰는 방법과, 그렇지 않은 방법이 있다고 생각합니다.
돈을 쓰는 방법은, 학원을 간다든가 온라인 강의들을 들어서 실력을 기르는 방법이 있습니다. 이것은 굉장히 체계적인 가이드가 존재하고, 피드백을 해 줄 사람도 (돈을 충분히 낸다면) 있습니다. 물론, 어떤 한계점을 올라가면 학원이나 온라인 강의가 해결 해 주지 못하는 시점이 존재하지만, 그 한계점에 도달한 사람은 한국에는 두자릿수 정도 된다고 생각합니다.
그렇지 않은 방법은, 돈을 많이 쓰지 않고 배울 수 있는 자료들을 제공 해 주는 곳입니다. 제가 알고 있는 커뮤니티는, Baekjoon Online Judge, Codeforces 등이 있고, 다양한 문제들과 에디토리얼, 그리고 가이드를 제공합니다. 또한, 적당한 가격의 책을 사면 그 책에서 다양한 공부할 수 있는 자료들을 준비 해 줍니다. 그래서 그 에디토리얼과 가이드를 보고 배우면 됩니다. 무엇을 공부할 지 모를 때에는, 문제들을 고민하고, 막히면 에디토리얼을 참고하면서 스킬을 익혀갈 수 있습니다. 그래서 열심히 공부하면, 충분히 높은 자리에 올라갈 수 있습니다.
...라면 행복하겠지만, 생각보다 굉장히 많은 병목들이 있습니다.
일단 커뮤니티부터 얘기를 해보면, 백준 온라인 저지는 생각보다 많은 얘기들이 슬랙 내에서 이루어집니다. 그리고, 코드포스는 많은 얘기들이 블로그에서 이루어집니다. 그리고 그 커뮤니티만의 독특한 문화와 요구치가 있습니다. 이 문화가 자신과 맞지 않다면 그 커뮤니티에 손을 대는 일이 줄어들게 됩니다.
BOJ슬랙에서는 슬랙 내부에 친목이 강한 편입니다. 이 일은 필연적이라고 생각합니다. 이유는 오프라인 대회를 가면, 계속 아는 사람을 만나기 때문입니다. 그렇기 때문에, 외부 사람이 보았을 때 무슨 얘기인지 모르는 대화를 하는 경우가 있고, 친목하는 문화는 배우려는 사람으로서 하여금 얼어지게 할 수도 있습니다.
Codeforces에서는 실력으로 사람을 재는 경우가 많습니다. 저는 ratism이라고 까지 표현 합니다. 이게 무슨 얘기냐면, 포스트의 내용과 관계 없이 그 사람의 실력, 그 사람의 색으로 게시글을 판단하는 경우가 많다는 것입니다. 그리고 레이팅이 낮은 사람이 질문을 하면 잘 안 받아주는 경우도 있습니다.
뭐 이런것들은 사실 부가적인 것들이고, 뭐 어느정도 참아줄 수 있는 것들입니다. 이 다음의 진입장벽은 영어라고 생각합니다. 자신의 실력을 측정하기 위한 프로그래밍 대회에는 Codeforces, Atcoder, Topcoder 등이 있고 이 문제들은 전부 다 영어로 출제 됩니다. 즉, 자신의 실력을 측정하고 점수로 받아보고 피드백을 받기 위해서는 영어가 필수적입니다. (Codeforces는 러시아어, Atcoder는 일본어를 할 줄 알면 되지만... 이를 아는 것이 영어를 아는 것 보다는 좀 더 어려운 것 같습니다.) 어떤 어려운 자료구조에 대한 자료들을 요구해도, 영어로 된 튜토리얼 링크를 받는 경우가 많습니다. 이를 위해서 어느정도는 영어에 익숙해 질 필요가 있습니다. 저는 "프로그래밍은 누구나 배울 수 있다, 영어를 안 다면." 이라는 말이 정말 맞는 말이라고 생각합니다.
영어는 정말, 한국에서 PS를 즐기고 싶을 때 너무 필연적으로 필요하다고 생각합니다.
다음으로는, PS자체가 가지고 있는 진입장벽도 있습니다. 진입 장벽이 수학이라고 생각합니다. PS는 본질적으로 숫자 놀음이고, 어느 정도 수학을 할 줄 알아야 진입 할 수 있다고 생각합니다. 가령이면, n과 k가 양의 정수 일 때, n/k 보다 크거나 같은 최소의 정수를 구하는 방법은 (n-1)/k+1 입니다. 이것을 직관적으로 받아들이지 못한다면, 그냥 ceil(n/k)를 모두 더하는 것과 같은 상대적으로 간단한 문제를 푸는데도 오랜 시간이 걸릴 것 입니다.
그리고, 이는 PS자체만 가지고 있는 것이 아니라 모든 일이 가지고 있는 장벽으로 시간이 있습니다. 설명하지 않아도 잘 알 수 있을 것이라고 생각합니다.