(펌) how to improve algorithm competition skill

(dreamoon이 본인 코드포스 블로그의 올렸던 글의 번역입니다.)

최근 1년 사이, 왜인지 모르겠지만 수많은 분들로부터 비슷한 문제로 고민이라는 메세지를 받았습니다. 그래서 이 블로그 글을 쓰기로 결심했어요.

시작하기에 앞서, 이 블로그 글을 다 읽으면 여러분은 실망할지도 모른다는 말을 해야겠어요. 왜냐하면 그닥 특별한 팁이 없거든요. 제 공부법은 정말 많은 시간을 필요로 했어요.

반드시 알아야 할 기본적인 것들이 있습니다.

  1. 연습하고, 연습하고, 연습하세요. 전 문제를 생각하고 푸는데 정말 많은 시간을 써요. 하루에 평균 5시간 정도 쓰는 것 같아요.

  2. 굉장한 실력을 가진 친구들을 많이 사귀세요. 전 갓들을 많이 알아요. 예를 들면 arosusti, kelvin, peter50216(0O0o00OO0Oo0o0Oo), seanwu, Shik, takaramono, tmt514, ... 만약 몇 주를 고민해도 못 푸는 문제가 있다면, 친구들에게 물어서 대부분 해결하곤 한답니다.

그리고 혼자 연습하기 위해 무얼하는지 말씀드릴게요. 문제를 풀 때 2가지의 가능한 순서로 문제를 고릅니다.

  1. 사람들이 가장 많이 푼 문제부터 시작합니다.
  2. 연속된 번호의 문제들을 모두 풀려고 합니다.

무엇이 더 좋은지는 잘 모르겠어요. 종종 전략을 바꾸곤 해요. 한 온라인저지에서 더 이상 풀 수 있는 문제가 잘 안풀리면 다른 온라인저지로 옮겨서 문제들을 풀어요. 사실, 문제를 푸는 순서는 저한테 별로 중요하지 않아요. 한 온라인저지에서 90%의 문제를 읽고 풀어요. 이러니 순서가 중요하겠어요? 어떤 순서가 좋은지 모르다보니, 그냥 거의 다 풀어버려요.

제가 사용하는 온라인저지 리스트들이에요. (사실, 많은 대만 온라인 저지들이 있는데, 모든 사람에게 오픈이 아니라 여기엔 안 적었어요.)

  1. Codeforces 여기가 최근엔 제일 좋은 곳인 것 같아요. 사용하기 편리하고 대부분의 문제들에 대해 풀이가 있어요.
  2. Topcoder 굉장한 문제들이 많아요. 심지어 250점짜리(easy) 문제들조차 아름다운 경우가 가끔 있어요. 여기도 대부분의 문제들에 대해 풀이가 있어요. ( 여기서 문제를 찾을 수 있고 / 여기서 풀이를 찾을 수 있어요 )
  3. sgu sgu는 가장 어려운 온라인저지라고 생각합니다. 흔치 않은 스킬을 요구하는 문제들이 많아요. (현재는 접속이 안되는 상태네요.... ;;)
  4. Timus 어려운 Contest들이 많습니다. 그룹 트레이닝에 좋다고 생각해요.
  5. Project Euler 이 사이트에는 좋은 수학 문제들이 많습니다. 어떤 문제를 푸시면, 포럼에서 그 문제를 해결한 다른 사람들의 풀이도 볼 수 있어요.

제 생각에 연습과 실전 대회에서의 느낌은 많이 다릅니다. 그래서 온라인저지에서 랜덤으로 몇 개의 문제를 골라서 세트를 만든 후, 시간을 정해서 연습을 하곤 해요. 그런데 코드포스에는 가상 참가 기능이 있어요. 우린 이제 그걸 코드포스에서 하면 편하게 하면 됩니다.

저는 주제별로 묶어서 문제를 풀지 않아요. 반대로, 어떤 문제를 풀다가 모르는 부분이 나오면 그 부분을 찾아서 공부합니다. 그러고나서 제 친구들에게 그 문제가 해당 부분과 연관이 있는지 물어보거나 구글링하죠.

저는 대게 문제를 맞추더라도 그걸 푼 다른 사람들의 코드를 읽어봐요. 가끔씩 완전 다른 풀이, 더 빠른 풀이, 더 짧은 코드를 만날 수 있어요.

특정 웹사이트나 자료를 보고 공부하지 않아요. 필요한 게 있으면 각각 구글링할 것 같아요.

이게 제가 알고리즘 대회를 공부하는 방법 전부입니다.

댓글 (1개) 댓글 쓰기


tae 1년 전

연속된 번호의 문제를 모두 해결하는 전략은 처음 듣는 전략이 아니네요. 역시 구관이 명관인지 :)