전체 글 372

064 : 최소 신장 트리 구하기

작은것부터 연결해야 하기 때문에 - 54321 정배열 PriorityQueue - 배열의 기준을 잡으려고(w) compareTo 필요 * 인식자에서 queue에 바로 넣어버리므로 별도 TP list는 필요하지 않음 (넣자마자 자동 정렬됨) union은 이미 check-in 되었다는 phaser로 사용됨 노드가 3개라면 모두 연결된 에지는 2(V-1)개이다 그래서 while공간이 1 > 2를 모두 순회하고 3은 진입하지 않는다 import java.util.PriorityQueue; import java.util.Scanner; public class Main { static int[] parent; public static void main(String[] args) { // ISC Scanner sc ..

053 : 줄 세우기

ArrayList - capacity를 별도로 정하지 않고 - 1~V번 new ArrayList()를 add한다 []처럼 순차 pointer(i)가 없으므로, get(s)를 사용하여 access 그리고 add를 더함 또 순서가 있으므로 배열과 달리 단방향만 더해주면 된다 TP와 별도로 Field인 Queue가 필요 * 에지 가중치가 아닌, 에지 양 끝 노드의 순서이고 순서 정보는 indegree로 공급받으므로 pQ는 필요없다 *통상 OP시 개설해도 되지만, indegree가 0인것을 먼저 넣고 시작해야 하므로(sP) 미리 개설 후 sP 유입까지 끝내둔다 indegree가 0인 (동일 위상 내) 무더기 작업이 끝나고 다음 작업이 필요하므로 BFS를 사용한다(DFS와 대조하여) sP는 위에서 작업했으므로, ..

026 : DFS와 BFS 출력

Cont - 초기화 - D2TP TP[i] 하나하나가 ArrayList이므로 for문으로 sort해줘야 한다 DFS pairing - divergence - phaser now + connected 진입시 phaser 체크됨 BFS는 DFS와 여러 차이점이 있는데 - 재귀가 아닌 Field필요하여 Queue 생성 - 처음 진입한 것은 sP로 별도 인식 나오는 now와 들어가는 connected를 pairing함 - 진입할때 phaser 체크됨 import java.util.*; public class Main { static ArrayList[] TP; static boolean[] visited; public static void main(String[] args) { // ISC Scanner sc ..

036 : 최솟값을 만드는 괄호 배치 찾기

plate를 만들고 - 쏴준다 그사이 OP + receiver로 plate를 사용한다 line을 String[] set으로 나눈다 char[]는 하면 안됨 "[+]" 기준으로 split String이므로 Int로 Parsing해줄것 "-" 기준으로 split Sum 작업 맡기기(plate로 리턴됨) 0이면 더하고 나머지 다 빼기 import java.util.Scanner; public class Main { static int plate = 0; public static void main(String[] args) { // ISC Scanner sc = new Scanner(System.in); String str = sc.nextLine(); // D2F String[] set = str.split(..

034 : 수를 묶어서 최댓값 만들기

Priority // 5, 4, 3, 2, 1 // -1, -2, -3, -4, -5 Priority reversal // 1 2 3 4 5 // -5. -4. -3. -2. -1 D2F는 container 공간이 먼저 필요 그다음 나눠서 delivery 1 이상 위상공간에서는 모두 곱셈작업이 일어난다 계산은 recursive bottom처럼 마지막에만 생각하면 됨 - 3이 남거나 - 2가 남거나 pq는 그냥 더해주면 되고, mq는 0이 있으면 곱해서 없앰 - import java.util.Collections; import java.util.PriorityQueue; import java.util.Scanner; public class Main { public static void main(String..

033 : 카드 정렬하기

pq > 5 4 3 2 1 offer > (자동정렬) > remove - while 내부 local pointer - (pq.size != 1) 로 표현해도 되고 - (pq.size() > 1)로 표혀해도 됨 - 중요한거는 2가 빠지고 1이 추가되므로 1씩 줄어든다 plate는 이제까지의 횟수가 모두 누적된 것이므로, 새로 넣는 offer는 plate가 아닌 d1+d2를 넣어야 함 - import java.util.PriorityQueue; import java.util.Scanner; public class Main { public static void main(String[] args) { // ISC Scanner sc = new Scanner(System.in); int N = sc.nextInt..