Goal
- 알고리즘은 완전탐색에서 시작한다
- 시간복잡도란 작동하는 알고리즘의 수행시간을 정량화하는 것을 뜻하며, 일반적으로 worst case를 가정하고 계산함
- 알고리즘 구현 전, 미리 구현하고자 하는 알고리즘의 공간복잡도와 시간복잡도를 생각해야 함
알고리즘의 조건
- 정밀성 : 변하지 않는 명확한 작업 단계를 거쳐야 함
- 유일성 : 각 단계마다 명확한 다음 단계를 가져야 함
- 입력
- 출력
- 유한성: 특정 수의 작업 이후에 정지해야 함
- 일반성 : 정의된 입력들에 일반적으로 적용할 수 있어야 함
알고리즘의 구성요소
- 입력
- int – long, float – double 범위
- Scanner vs BufferedReader 속도
- int[10][100,000] vs int[100,000][10]
- 간선 리스트, 인접 행렬, 인접 리스트
- 계산
- 문제 풀이와 계산을 위한 반복문, 조건문, 반복문, 조건문
- DFS, BFS, 검색, 정렬, 각종 알고리즘
- 출력
- String + 연산, StringBuilder
- 소수점 출력
문제유형
- 완전탐색 (모든 경우의 수 계산)
- DFS, BFS, Backtrack, 재귀 etc.
- 자료구조
- Stack, Queue, Priority Queue, Hash, Index Tree etc.
- 그래프
- Union/Find(합집합, 서로소), MST(최소신장트리, 크루스칼, 프림), 최단경로탐색(다익스트라, 벨만포드, 플로이드 워셜)
- 정수론
- 약수, 소인수 분해, 유클리드 호제법(최대공약수), 에라토스테네스의 체(소수 찾기), 위상정렬 etc.