주의! 이 과정은 알고리즘에 특화되어 있습니다. 일반적인 교육과정과는 다를 수 있습니다.
박인서가 개인적으로 필요하다고 생각되는 부분을 적은 것이므로 많은 피드백 바랍니다.
1.1. 프로그램 세상보기 ¶
- ZeroWiki 작성법
- Hello, World! 프로그램 작성
- 기본적인 C 프로그램 구조
- 입출력과 주석
- 변수와 자료형
- ASCII 코드
- 진법 표현
- 형변환
- 키워드와 식별자
- 연산자의 종류
- 연산자 우선 순위
- if ~ else 와 else if
- switch
- 배열 기초
- for문
- while 과 do while
- break와 continue
- 함수란?
- 함수 정의하기
- 변수의 범위
- main 함수에 파라미터 전달하기
- 재귀함수
- 전처리기
- 포인터
- 메모리 주소
- & 연산자
- 포인터 변수와 자료형
- Call by value와 Call by reference
- 배열 다시 보기
- 배열과 포인터
1.6. 다차원 배열과 연결 리스트 ¶
- 구조체
- 다차원 배열
- 행렬
- malloc과 free
- linked list
1.7. 문자열과 파일 입출력 ¶
- 문자열이란?
- 문자열의 선언
- 문자열 함수
- KMP 알고리즘
- 문자와 정수의 변환
- 파일 입출력 선언
- 파일 입출력
2.1. 더하기로 넘어가기 ¶
- 헤더와 include 개념 잡기
- std::cin, std::cout, std::endl
- 참조 형식과 값 형식
- 함수 오버로딩
- 디폴트 파라미터
- 동적할당 new, delete, delete[]
2.2. 클래스와 유용한 문법 ¶
- 클래스와 구조체
- 클래스와 인스턴스
- 클래스 정의 문법
- public과 private
- 메소드 외부 정의
- auto
- range-based for loop
- initalizer-list
- lambda expression
- pair
- vector, deque
- set, map
- stack, queue, priority_queue
- string
- reverse, swap
- sort/stable_sort
- binary_search
- lower_bound/upper_bound
- min/max
- min_element/max_element
3.1. 알고리즘 기초와 수학 ¶
- 알고리즘의 정의
- 시간 복잡도
- 최대공약수/최소공배수(유클리드 호제법)
- 소수 판별법
- 팩토리얼
- 피보나치 수
3.2. 스택 & 큐, 정렬 & 탐색 ¶
- 스택
- 큐
- 덱
- 선택/삽입/버블 정렬
- 퀵/머지 정렬
- Binary Search
- 그래프(정의, 용어)
- 인접 행렬과 인접 리스트
- 트리(정의, 순회)
- 트리 저장법(직접 구현, 배열 이용)
- 힙(정의, 정렬)
4.2. 분할 정복 & 그리디 알고리즘 ¶
- 이분 탐색 알고리즘
- Parametric Search(Bisection)
- 그리디 알고리즘
4.3. 다이나믹 프로그래밍 1 ¶
- 다이나믹 개념
- 부분 집합
- 업 시퀀스
- knapsack
- 트리 응용(트리의 부모, 트리의 폭)
- 이진 검색 트리(BST)
- 가장 가까운 공통 조상(LCA)
- 최소 스패닝 트리(위상 정렬, 프림/크루스칼)
- 최단 경로(다익스트라, 플로이드 와샬)
- Flood Fill 알고리즘
- 플레인 스위핑
- Convex Hull(Graham Scan)
- 이론(최대 유량, 이분 매칭, 민 컷)
- 최소 비용 유량(MCMF)
- 이분 그래프
- Disjoint-set
- 2-SAT
- 위에 적힌 것 외에 필요하다고 생각되는 알고리즘을 아래에 적어봅시다.
- Dynamic Programming 2에 어떤 것을 채워야 될 지 모르겠군요.