
트리
인덱스 2idx + 1의 왼쪽 자식
인덱스 2idx + 2의 오른쪽 자식
1
/ \
2 3
/| |\
4 5 6 7
현재 노드를 부모 노드로 생각했을 때 왼쪽자식-> 부모 -> 오른쪽 자식
정렬된 순서대로 값을 가져올때 사용
현재 노드를 부모 노드로 생각했을 때 왼쪽자식-> 오른쪽 자식 -> 부모
트리 삭제에 유용!
집합
private static void union(int x, int y){
int root1 = find(x);
int root2 = find(y);
parent[root2] = root1;
}
private static int find(int x){
if(parent[x]==x)
return x;
return parent[x] = find(parent[x]);
}
그래프
그래프 탐색
준비물
1. 방문 여부 저장배열 boolean[] visited
2. 재귀로 풀면 stack 구현 필요없어
준비물
1.최단거리면 int[] dist || 방문여부 배열 boolean[] visited
2.queue
- 2차원이면 dist 도 2차원 + Node로
최단경로
준비물
0. 노드 클래스 구현 Node(dest,cost)
1. 인접 리스트 저장배열 ArrayList< Node>[] adList
2. 방문 여부 저장배열 boolean[] visited
3. 우선순위 큐 PriorityQueue< Node> pq
while(노드 개수 -1)
(아직 방문하지 않은 노드 중) 최소 비용 노드선택 후 다른 곳까지의 경로 비용 vs 현재까지 구한 최소 비용으로 다른곳까지의 경로 비용 하나하나 비교.
1차원 리스트. 노드의 개수+1 로 크기 정하기.
매 단계마다 모든 간선 가중치 다시 확인 -> 음의 가중치도 가능!
음의 사이클을 감지할 수 있음.
다익스트라와 같지만,
ArrayList 변환
public String[] solution(String[] record) {
ArrayList<String> result = new ArrayList<>();
...
return result.toArray(new String[0]);
}
public int[] solution(String[] genres, int[] plays) {
ArrayList<Integer> answer = new ArrayList<>();
return answer.stream().mapToInt(Integer::intValue).toArray();
}
백트래킹
준비물
정렬
Collections.sort(adj);
Arrays.sort(array);