https://wikidocs.net/218198
구현 ★★★★
그래프 ★★★★
DFS/BFS ★★★★★
탐욕법/Greedy ★★★★
해시 응용★★★★★
문자열 ★★★★★
이분탐색 ★★★
동적계획법 (DP) ★★★
비트 마스킹★★
슬라이딩 윈도우 & 투포인터 ★★
누적합 ★★
최단경로 ★★
정렬 ★★
백트래킹 ★★
브루트포스 ★★
분할정복 ★★
빅-오메가(Ω(n)) : 최선
빅-세타(θ(n)) : 보통
빅-오(O(n)) : 최악
시간복잡도 도출 기준
시간복잡도 풀기
배열과 리스트의 차이점
메모리 할당: 배열은 연속적인 메모리 공간에 할당되고, 리스트는 비연속적인 메모리 공간에 할당된다.
크기: 배열은 크기가 고정되어 있으며, 리스트는 가변적이다.
접근 방법: 배열은 인덱스를 통한 빠른 접근이 가능하지만, 리스트는 순차적으로 접근해야 한다.
삽입과 삭제: 배열은 삽입과 삭제가 번거롭고 시간이 오래 걸리지만, 리스트는 삽입과 삭제가 빠르다.
수열에서 특정 구간의 합을 구할 때 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘
합배열 만드는 공식
S[i] = S[i-1] + A[i]
구간합 구하는 공식
S[j] - S[i-1]
2개의 포인터로 알고리즘 시간복잡도를 최적화
슬라이딩 윈도우
2개의 포인터로 범위를 지정한 후 유지한체 이동하면서 문제를 해결
스택
큐
버블 정렬 : loop돌면서 인접요소끼리 swap(n²)
선택 정렬 : 최대 나 최소데이터 찾아가며 선택
(구현방법 복잡하고 시간복잡도(n²) 코테에 잘 사용 x)
삽입 정렬 : 이미 정렬된 범위에 정렬되지 않은 데이터를 삽입(시간복잡도(n²) 코테에 잘 사용 x)
현재 상태에서 보는 선택지 중 최선의 선택지가 전체 선택지 중 최선의 선택지라고 가정하는 알고리즘
서로소인 자연수의 개수
두 수의 최대공약수(GCD)를 구하는 알고리즘 (MOD 연산)
노드와에지로 구성된 집합
유니온 파인드 : 사이클이 생성되는지 판별하는 알고리즘
위상 정렬 : 싸이클x, 방향이 있는 그래프일때 그래프의 노드들을 선형으로 정렬(정렬 결과가 꼭 한개는 아님)
i) 수강신청
i) 게임 빌드오더
최단거리 알고리즘
최소 신장 트리 (MST) : 그래프에서 최소의 가중치 합으로 모든 노드를 연결할수있게 해주는 알고리즘
i) 유니온 파인드 필요 (싸이클 나올 수 없게끔 방지용)
에지리스트
인접행렬
★★★
특정 노드 두개연결하는 union연산과 두노드가 같은집합에 속해있는지 확인하는 find연산으로 구성
union 연산은 항상 대표노드끼리 연결해준다.
find : 자신의 대표 노드를 찾는연산 -> 그래프를 정돈하고 시간복잡도 향상
방향성이 있고, 사이클이 없는 그래프(DAG 그래프)에서 노드 순서를 찾는 알고리즘
그래프 최단거리를 구하는 알고리즘 (에지가 모두 양수여야함)
그래프 최단거리를 구하는 알고리즘 (음수간선도 가능)
그래프의 특수한 형태
1개의 루트노드 ( 싸이클x )
루트노드를 제외한 나머지는 모두 1개의 부모노드를 갖습니다
트리에서 임의의 두 노드를 이어주는 경로는 한개로 유일하다
그래프로 푸는 트리
이진트리 / 세그먼트트리(index tree) / 최소 공통 조상 (LCA)
자식 노드의 개수가 2개이하로 구성된 트리
복잡한 문제를 분리