프로그래밍을 해보고 싶다고요?
먼저 기초 100제를 푸세요.
codeup.kr에 올라와 있는 기초 100제로 시작해보세요. 링크언어는 C언어로 해봅시다.
제가 기초 100제로 코딩을 시작해서인지는 모르겠지만 기초 100제가 정말 프로그래밍을 시작할 때, 해보면 좋은 문제들로 구성되어 있다고 생각합니다.
oj 사이트 활용를 활용합시다.
진짜 oj 사이트는 너무 많고 많습니다.(사실 저도 oj 사이트 만들 생각이지만 너무나 oj 사이트 만들기 어렵네요…ㅜㅜ) 제가 알고있는 oj 사이트들입니다.
- https://codeup.kr/index.php
- https://programmers.co.kr/
- http://koistudy.net/
- https://www.acmicpc.net/ (soved.ac 를 같이활용하는 것을 추천드립니다만..화이트리스트 목로겡 포함되셔야 합니다..ㅜㅜ)
- http://hmcoder.kr:8080/ (한민고 OJ입니다.)
- http://www.jungol.co.kr/
- http://codingfun.net/onlinejudge/
- https://leetcode.com/
이건 추가로 온라인 알고리즘 대회가 열리는 사이트 목록입니다.
- https://codeforces.com/
- https://www.sundaycoding.xyz/
- https://arena.topcoder.com/#/u/dashboard
- https://www.hackerrank.com/contests
- https://www.oncoder.com
고등학교 알고리즘 대회 및 프로그래밍 대회
뒤늦게 알고리즘에 고여가는 사람의 팁
고등학교 알고리즘 대회의 요즘 메타는 빡센 내용을 구현하거나 수학 실력이 뛰어나야 풀 수 있는 문제보다는 학생이 정말 이 문제에 대해서 깊은 생각을 하고 문제를 해결할 수 있는가를 보는 것 같습니다.
따라서, 평소에 알고리즘 문제를 풀어볼 때, 앞선 글에서 말했듯이 끝없이 질문하는 습관을 가지시는게 좋을 것 같습니다.
그래도 일단 진짜진짜 적어도 아래에 있는 알고리즘들은 공부해보시는 걸 추천합니다.
- counting sort
- quick sort
- Dynamic Programming (복잡한 것 까지는 아니어도 개념이라도..)
- 이분 탐색
- DFS / BFS (이거는 진짜 능숙하게 다루셔야 합니다.)
- Greedy Algorithm (탐욕 알고리즘, 탐욕적이다는 게 뭔지에 대해서 알고 있는게 좋습니다.)
- 최단 거리 알고리즘
- 최소 신장 트리 (Minimum spanning Tree)
- 에라토스테네스의 채
- 비트마스크
이 알고리즘들은 시간이 되거나 좀 더 어려운 걸 풀어보고 싶으시다면 도전해보세요.
- LIS (O(n^2) 방식과 O(nlogn) 방식 2가지 모두)
- 볼록 껍질
- 네트워크 플로우
- 이분 매칭
- 세그먼트 트리
- 평방분할 알고리즘
- Disjoint-Set
- 우선순위큐를 활용한 다익스트라 알고리즘
- 냅색
- CCW
- CC(Coin change)
- 세그먼트 트리 with Lazy Propagation
- 단절점(AP)
- LCA
추천하는 커리큘럼(계속 수정 될 예정입니다.)
아래의 그래프는 C++ 기준으로 작성되었습니다. (ACM-ICPC, 정보올림피아드 등등의 대회에서 주로 C++로 문제를 해결하기 떄문입니다.)