주의! 이 과정은 알고리즘에 특화되어 있습니다. 일반적인 교육과정과는 다를 수 있습니다.
박인서가 개인적으로 필요하다고 생각되는 부분을 적은 것이므로 많은 피드백 바랍니다.
박인서가 개인적으로 필요하다고 생각되는 부분을 적은 것이므로 많은 피드백 바랍니다.
- 권장 커리큘럼 : C언어 -> C++ & 기초 -> 실력 -> 심화
2.1. 더하기로 넘어가기 ¶
- 헤더와 include 개념 잡기
- std::cin, std::cout, std::endl
- 참조 형식과 값 형식
- 함수 오버로딩
- 디폴트 파라미터
- 동적할당 new, delete, delete[]
2.3. STL 2 ¶
- reverse, swap
- sort/stable_sort
- binary_search
- lower_bound/upper_bound
- min/max
- min_element/max_element
2.4. 클래스와 유용한 문법 ¶
- 클래스와 구조체
- 클래스와 인스턴스
- 클래스 정의 문법
- public과 private
- auto
- range-based for loop
- initalizer-list
- lambda expression
3.1. 알고리즘 입문 & 수학 1 ¶
- 시간 복잡도
- 입/출력(단일 입력, 여러개 입력, EOF)
- 나머지 연산
- 최대 공약수와 최소공배수
- 소수 판별법
- 진법 변환
- 팩토리얼
- 에라토스테네스의 체
- a^b 구하기
3.4. 그래프 1 ¶
- 그래프 용어
- 그래프 저장 방식(직접 구현, 인접 행렬, 인접 리스트)
- 그래프의 탐색(DFS, BFS)
- 연결 요소
- 이분 그래프
- Cycle 찾기
- Flood-Fill 알고리즘
3.5. 트리 1 ¶
- 트리 용어
- 트리 순회(preorder, inorder, postorder)
- 트리 저장 방식(직접 구현, 부모를 저장, 자식을 저장)
- 트리 너비와 높이
- Disjoint-set(Union-Find)
4.3. 수학 2 ¶
- a^b 분할 정복 이용
- a^b 이진수의 원리 이용
- 피사노 주기
- 피보나치 수의 다양한 성질
- 피보나치 수를 행렬을 이용해 계산
- 이항 계수
- 파스칼의 삼각형
- 카탈란 수
- 오일러 피 함수
- 확장 뉴클리드 알고리즘
4.5. 구간의 최소값 구하기(RMQ) ¶
- 그냥 다 해보는 방법
- 이차원 배열에 이용
- 루트 N으로 나눔(sqrt decomposition)
- 다이나믹 프로그래밍을 이용해서 구하는 방법
- 세그먼트 트리를 이용해서 구하는 방법
- 슬라이딩 윈도우 알고리즘
4.6. 구간의 합 구하기 ¶
- 누적합을 이용
- 세그먼트 트리를 이용
- 펜윅 트리(바이너리 인덱스 트리)를 이용
- 세그먼트 트리 나중에 업데이트 하기 (Segment Tree Lazy Propagation)
- 세그먼트 트리의 활용(분할 정복에 활용, K번째를 찾는 방법)
4.7. 네트워크 플로우 ¶
- 네트워크 이론(이분 매칭, 민 컷, 최소 버텍스 커버, 최대 독립 집합)
- 최대 유량(Ford-Fulkerson, Edmond-Karp)
- 네트워크 모델링 연습