분류 전체보기 372

030 : 블루레이 만들기

개수(counter)와 용량(plate set)은 반비례 관계 용량 기준으로 binary search를 진행하되, 용량이 초과시에 직전까지 것을 하나의 plate로 담음 해당 pointer의 TP[i]는 들어가지 않고 reset 후 다음 Plate로 들어감 같은 논리로, 직전까지 처리되고 해당것은 다음에 반영되는 TP-OP 구조로, 맨 끝 TP[V-1]가 남아있다면 추가 plate 할당 필요 counter가 3개보다 크다면 용량을 늘릴 필요가 있다 s T) s = m+1; else e = m-1; } // OEC System.out.println(s); } }

071 : 구간 합 구하기 3

size는 총 2번을 커버해야 한다 - bottomline의 수들과 - 그 수들의 합을 계산할 수 있는 slot들 "1에서 다시 2배씩 현재 수까지 도달하는 로직" > 현재 수가 1이 될때까지 exp /= 2; 하는동안 counter(exponent)를 1씩 올린다면, 총 2회가 나옴 > 그런데 5~7 사이의 수라면 감가된것이 있으므로 exp + 1; > bottom에서 위로 올라가면서 계산하는 slot을 위해 다시 (exp+1) + 1 5는 사실 8에 귀속되어야 하지만, 몫을 나눠서 height를 구하는 방식은 4에 귀속 됨 즉 4까지 8을 사용하는 것 2^3은 8, 그리고 bottom 한줄은 나머지 층수의 모든 노드 수와 동일함 기수와 서수 차이 15부터 역순으로 1까지 그러나 3과 2로 계산되어 1..

068 : 리프 노드의 갯수 구하기

DFS같은 recursive에서 - plate를 바로 return하거나 - print하기 어렵다 > 그래서 plate를 waterfalling variable로 만들어 main에서 print한다 부모 > 자식노드로 진입하기만 한다면 leaf가 생기는 것이고, 특정 노드(우선은 부모 노드로 간주)에서 자식으로 진입되는 게 아무것도 없다면(여기서는 deleteTarget 포함) plate 추가 부모-자식 쌍으로 유입하되 root는 별도 관리 root와 deleteTarget Lock 별도 관리 import java.util.ArrayList; import java.util.Scanner; public class Main { static ArrayList[] TP; static boolean[] visited..

067 : 트리의 부모 찾기

BFS 흐름에 parent 리시버 Pair만 해주면 된다 DFS로 가능한 것도 참고할 것 import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static ArrayList[] TP; static int[] parent; static boolean[] visited; public static void main(String[] args) { // ISC Scanner sc = new Scanner(System.in); int V = sc.nextInt(); // D2F TP = new ArrayList[V+1]; for (int i =..

070 : 트리 순회하기

순회 자체는 간단하다 현재 node Print / L recursive / R recursive 순서만 정해준 후 프로그램에게 '지금 - 다음' Unit의 반복으로 while line을 돌도록 시키는 것 *내가 하는 게 아님 문제는 인자의 공급과 어떤 TP를 사용할 것인가인데, binary tree 순회에서는 node 정보로 양 자식노드에 접근가능한 int[26][2] 사용 숫자 + 'A' = char String > char 도 가능 괄호로 묶어줘야 함 (char) (node + 'A') import java.util.ArrayList; import java.util.Scanner; public class Main { static int[][] TP; public static void main(Stri..

074 : 최소 공통 조상 구하기 1

depth 정보와 parent 정보 필요 > TP 정보 및 BFS로 공급해줄것 일반 BFS 흐름에 patch 부착 (pairing) - depth - parent parent는 connected와 now 관계로 바로 공급 가능 다만 root는 0으로 depth를 잡고 root아닌, root와 연결된 바로 다음 노드부터 depth정보를 공급하므로, sP - 지금 root(depth가 0인 노드갯수) 1 충족 - 다음 node의 depth = 1 depth가 1인 과거 노드갯수 queue.size() 충족 > 즉 queue.poll()로 다 빠져나갔을 때 > 다음 depth는 카운터를 올린다

056 : 최단 경로 구하기

단순 에지 순회만 하는 bellman-ford는 - queue 대신 Edge[] 를 사용 - Edge(s, e, w) class 공급하나 Comparable 넣지않음 MSP는 - PQ 사용 - Edge class(s, e, w) 공급 및 w 기반 Comaparble 역시 사용 Topology Sort는 - ArrayList로 []접근하지 않고 V만큼 ArrayList() 초기화 공급 - get으로 access DFS, BFS는 - ArrayList[] 로 양방향 노드 더하기 Dijkstra는 - ArrayList[]로 특정 노드에 연결된 '다음 노드 + distance' TP 정보를 공급 - 최단거리부터 갱신해야하므로 w 기반 PQ도 필요하다 - sP 필요 sP 작업 필요 에지가 여러개 있을 수 있으므로..

059 : 타임머신으로 빨리 가기

우선순위는 필요없으나 에지중심 작업이므로 s와 e, 그리고 사이인 w를 사용할 Edge class 필요 MSP처럼 최소거리부터 연결하기 위해 정렬시킬 필요가 있을 때에는 PQ에 에지를 (모두)넣고 (BFS없이)빼야 하지만 순서없이 단순히 모든 에지를 순회시켜 check-in으로 충분한 경우에는 Edge를 기반으로 하는 List만 만들고 넣어준다 receiver 필요 1이 sP이므로 0 설정 첫번째 for문은 단순반복이므로 while으로 대체하는게 편할수도 있다 모든 에지를 순회하되, 시작부터 INF 되는것은 거른다 크다 > 작다 에서 큰것 = 작은것 으로 할당 surviving boolean으로 return이 아닐 때에는 cont가 필요하다 더 작은 거리가 발생만 하면 변경작업 없이 바로 boolean으..