먼저 C언어 기초가 제대로 안 되어 있다면 C언어를 먼저 공부하자.


알고리즘 공부 할 때나, 대회에서는 대부분 C++을 사용하게 한다.

물론 C++ 기능을 다 사용하는게 아니라 C언어 기초 + STL + 일부 편리한 문법 정도만 사용하므로 C 기초랑 STL 사용법만 배워도 상관없다.


그 다음에는 책을 보는게 가장 좋다.

본인이 돈은 많고 책으로는 도저히 이해가 안 된다면 인강을 봐도 되지만, 내 생각에는 책으로 충분함


책은 다음과 같은 책을 추천한다.


(1) 종만북: http://www.yes24.com/24/goods/8006522

처음 시작하는 사람은 무조건 이거 보자. 알고스팟에 문제가 모두 올라가 있어 편리하게 공부할 수 있다.


(2) 노란책: http://www.yes24.com/24/goods/5814363

좀 더 깊게파고 싶을 때 보는 책이다.


(3) 하얀책: http://www.yes24.com/24/goods/42415865

최근에 번역된 책인데, 국가대표 지도자가 써서 그런지 ICPC에 다루는 대부분의 내용이 들어가있다.

어느정도 알고리즘이 익숙한 사람이 ICPC 대비용으로 책을 한 권 사고싶다면 추천한다.

U.Va나 ICPC Archive 문제만 담고 있어서 연습문제를 풀기가 어려운 건 좀 안 좋다.


(4) 빨간책: http://www.yes24.com/24/goods/11259881

탑코더 입문서임. 탑코더 할 생각있으면 사서 보자.


(5) 초록책: http://www.yes24.com/Product/Goods/72274740
(New) 새로 나왔는데 잘 모르겠음. 목차보면 좋긴 함


책을 풀면서 익숙해지면 Online Judge 사이트에 가서 문제를 풀어보거나, 대회를 참가해보자.


+ 알고스팟: 종만북 보면서 했을테니까 생략함


+ 백준 Online Judge: https://acmicpc.net/

문제 풀기 아주 좋은 곳이다. 한국어로 번역도 잘 되어있으며 평균 채점속도도 빠르다. 문제도 잘 추가된다.

Slack(채팅방)을 운영하고 있어, 모르는 문제를 물어보거나, 최근 PS 근황을 알아볼 수 있다. 난 별로 안들어가기는 하는데 도움은 많이 된다고 함.


+ Codeforces: https://codeforces.com/

방대한 양의 ICPC 대회 자료를 가지고 있으며, 자체 대회 퀄리티도 괜찮은 편이다.

주기적으로 대회를 여는데 참가하면 실력 향상에 도움이 된다.

대회 참가에 따른 Rating이 있어 본인의 실력이 어느정도인지 알아볼 수 있다. 또한 이러한 Rating의 증감이 보이므로써 공부 의지를 불태울수있다.


대회는 다음과 같은 대회가 연습하기에 좋다.


COCI
USACO
OI 계열: IOI, APIO, POI, BOI(Balkan), KOI, JOI, ...


공부 순서

보통은 다음의 순서로 배운다고 한다.


01. STL 1: 기초 자료구조 (큐, 스택, 힙, 벡터, 데큐, 맵, 셋 ...)

02. STL 2: 기초 알고리즘 (이분 탐색, 정렬, ...)

03. 그래프 1: BFS, DFS

04. 전수탐색과 재귀호출
05. Greedy 기초

06. Dijkstra, Floyd, 벨만-포드

07. DP 1

08. 문자열 기초 (KMP, Manacher)

09. 수학 1: 정수론 기초

10. DP 2: 다차원, 메모이제이션, 분할정복

11. 기하 기초

12. 그래프 2: SCC, 2-SAT

13. DP 3: 비트마스크, 기댓값

14. Network Flow, 이분 매칭

15. Segment Tree와 BIT (+ 2D BIT)

16. 문자열 응용 (아호 코라식, Suffix Array)

17. MCMF

18. DP 4: Knuth, CHT, D&C / 아호코라식 DP / 메모리 사용량 줄이기 등 비정형 문제

19. Segment Tree 2: Lazy 이용, Persistent Segment Tree, 2D Segment Tree, Quad Tree, ...

20. 수학 2: FFT

21. BBST (Splay tree) 응용, Link-cut tree, ...


여기 있는거 말고도 HLD나 LCA, Euler Tour, Parallel binary search, Two pointer, Plane sweeping 같은게 있는데 알아서 찾아보셈


참고한 글

+ https://www.slideshare.net/startlinkio/startlinklive-algoshipda

+ http://plzrun.tistory.com/entry/알고리즘-문제풀이PS-시작하기

+ https://www.acmicpc.net/board/view/2593