구간합, 최대, 최소 구할때? 배열 주고 한번만 구간합, 최대, 최소를 물어보면 그냥하면 됌 근데 여러번 물어본다면? 여러번을 for문에 for문을 돌리겠지. 이때 쓰는거라 함 구간합 1. N개 수가 있으면 var k = Math.ceil(Math.log2(v)); 2. 2진트리에 맨 아래층(k+1층)에 왼쪽부터 깔고 3. 남는 부분은 0으로 채우고 var A = Array.from({length: Math.pow(2,k+1)}, () => 0); for (var i=0;i=1;i--) { A[i] = A[2*i] + A[2*i+1]; } 5. 루트노트를 배열의 index=1로 시작해서 배열로 만듬 6. 구간합을 위한 start, end 인덱스가 정해지면 7. start가 형제노드들 중에 왼쪽인지 오른쪽..

배열 const Pq = class { constructor() { this.arr = []; } get () { return this.arr.pop(); } put (x) { var isPush = false; for (var i=0; i this.heap[leftIndex] || this.heap[currentIndex] > this.heap[rightIndex]) { const temp = this.heap[currentIndex]; if (this.heap[leftIndex] < this.heap[rightIndex]) { this.heap[currentIndex] = this.heap[leftIndex]; this.heap[leftIndex] = temp; currentIndex = leftIn..
arr: 정렬된 상태 var start = 0; var end = arr.length-1; while (start
var A = Array.from({length: len+1}, () => []); for (var [x,y] of arr) { A[x].push(y); A[y].push(x); } console.log(A); function bfs(num) { var visited = Array.from({length: len+1}, () => false); var queue = []; queue.push(num); visited[num] = true; while (queue.length) { var x = queue.shift(); for (var y of A[x]) { if (!visited[y]) { visited[y] = true; queue.push(y); } } } }
// edge var A = Array.from({length: vertex+1}, () => []); for (var [x,y] of arr) { A[x].push(y); } // DFS var visited = Array.from({length: vertex+1}, () => false); function dfs(v) { console.log(v); visited[v] = true; for (var x of A[v]) { if (!visited[x]) { dfs(x); } } } var cnt = 0; for (var i=1; i