From 75742bf29898ffa525adfe11c98b5c8501d60479 Mon Sep 17 00:00:00 2001 From: Jonghwan Lee <123362165+0224LJH@users.noreply.github.com> Date: Tue, 19 Aug 2025 13:17:31 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Delete=2013=20BOJ=20=20=EA=B8=88=EA=B3=A0?= =?UTF-8?q?=20=EC=97=B4=EA=B8=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\352\263\240 \354\227\264\352\270\260.md" | 70 ------------------- 1 file changed, 70 deletions(-) delete mode 100644 "13 BOJ \352\270\210\352\263\240 \354\227\264\352\270\260.md" diff --git "a/13 BOJ \352\270\210\352\263\240 \354\227\264\352\270\260.md" "b/13 BOJ \352\270\210\352\263\240 \354\227\264\352\270\260.md" deleted file mode 100644 index 8ccbd253..00000000 --- "a/13 BOJ \352\270\210\352\263\240 \354\227\264\352\270\260.md" +++ /dev/null @@ -1,70 +0,0 @@ -```java -import java.io.*; -import java.util.*; - -public class Main { - - static final double EPS = 1e-6; - static StringBuilder sb = new StringBuilder(); - - public static void main(String[] args) throws Exception { - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - int size = Integer.parseInt(br.readLine()); - - for (int t = 0; t < size; t++) { - StringTokenizer st = new StringTokenizer(br.readLine()); - double[] nums = new double[4]; - for (int i = 0; i < 4; i++) nums[i] = Double.parseDouble(st.nextToken()); - - boolean ok = canMake24(nums); - sb.append(ok ? "YES" : "NO").append('\n'); - } - System.out.print(sb.toString()); - } - - private static boolean canMake24(double[] arr) { - List list = new ArrayList<>(4); - for (double v : arr) list.add(v); - return dfs(list); - } - - private static boolean dfs(List nums) { - int n = nums.size(); - if (n == 1) { - return Math.abs(nums.get(0) - 24.0) < EPS; - } - - // 두 수 선택해서 하나로 줄이기 - for (int i = 0; i < n; i++) { - for (int j = i + 1; j < n; j++) { - double a = nums.get(i), b = nums.get(j); - List nextCandidates = new ArrayList<>(6); - - // 덧셈/곱셈은 교환법칙이 있어 한 번만 추가 - nextCandidates.add(a + b); - nextCandidates.add(a * b); - - // 뺄셈/나눗셈은 순서가 중요하므로 양쪽 모두 시도 - nextCandidates.add(a - b); - nextCandidates.add(b - a); - if (Math.abs(b) > EPS) nextCandidates.add(a / b); - if (Math.abs(a) > EPS) nextCandidates.add(b / a); - - // 선택한 두 수를 제외한 나머지에 후보 결과를 붙여서 재귀 - for (double cand : nextCandidates) { - List next = new ArrayList<>(n - 1); - for (int k = 0; k < n; k++) { - if (k == i || k == j) continue; - next.add(nums.get(k)); - } - next.add(cand); - - if (dfs(next)) return true; // 해 찾으면 바로 종료 - } - } - } - return false; - } -} - -``` \ No newline at end of file From da3fed71b575d70429f2b0d21ab7427aff6456c6 Mon Sep 17 00:00:00 2001 From: Jonghwan Lee <123362165+0224LJH@users.noreply.github.com> Date: Wed, 20 Aug 2025 15:11:47 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[20250820]=20BOJ=20/=20G3/=20=ED=8C=8C?= =?UTF-8?q?=ED=8B=B0=20/=20=EC=9D=B4=EC=A2=85=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20 BOJ \355\214\214\355\213\260.md" | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 "0224LJH/202508/20 BOJ \355\214\214\355\213\260.md" diff --git "a/0224LJH/202508/20 BOJ \355\214\214\355\213\260.md" "b/0224LJH/202508/20 BOJ \355\214\214\355\213\260.md" new file mode 100644 index 00000000..4ca191d3 --- /dev/null +++ "b/0224LJH/202508/20 BOJ \355\214\214\355\213\260.md" @@ -0,0 +1,145 @@ +``` java +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + + +public class Main { + static final int MAX = Integer.MAX_VALUE/2; + + static PriorityQueue nodePq = new PriorityQueue<>(); + static PriorityQueue edgePq = new PriorityQueue<>(); + static Node[] nodes; + static boolean[] visited; + static int[] dis,totalSum; + + static int nodeCnt, edgeCnt, target, ans; + + + + static class Node implements Comparable{ + int num; + int dis; + List edges; + + public Node(int num) { + this.num = num; + edges = new ArrayList<>(); + } + + public int compareTo(Node n) { + return this.dis - n.dis; + } + } + + static class Edge implements Comparable{ + int to; + int weight; + + public Edge(int to, int weight) { + this.to = to; + this.weight = weight; + } + + @Override + public int compareTo(Edge e) { + return this.weight - e.weight; + } + + + } + + public static void main(String[] args) throws IOException { + init(); + process(); + print(); + } + + public static void init() throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + + nodeCnt = Integer.parseInt(st.nextToken()); + edgeCnt = Integer.parseInt(st.nextToken()); + target = Integer.parseInt(st.nextToken()); + ans = 0; + + nodes = new Node[nodeCnt+1]; + totalSum = new int[nodeCnt+1]; + for (int i = 1; i <= nodeCnt; i++) { + nodes[i] = new Node(i); + } + + for (int i = 0; i < edgeCnt; i++) { + st = new StringTokenizer(br.readLine()); + int from = Integer.parseInt(st.nextToken()); + int to = Integer.parseInt(st.nextToken()); + int weight = Integer.parseInt(st.nextToken()); + nodes[from].edges.add(new Edge(to,weight)); + } + + } + + public static void process() { + for (int i = 1; i <= nodeCnt; i++) { + makeMinDis(i); + if (i == target) { + for (int j = 1; j <= nodeCnt; j++) { + totalSum[j] += dis[j]; + } + + } else { + totalSum[i] += dis[target]; + } + } + + for (int i = 1; i <= nodeCnt; i++) { + ans = Math.max(ans,totalSum[i]); + } + } + + + private static void makeMinDis(int start) { + + dis = new int[nodeCnt+1]; + visited = new boolean[nodeCnt+1]; + Arrays.fill(dis, MAX); + dis[start] = 0; + + nodePq.clear(); + nodePq.add(nodes[start]); + + while (!nodePq.isEmpty()) { + Node n = nodePq.poll(); + int from = n.num; + + if (from != start && from == target) break; + + if (visited[from]) continue; + visited[from] = true; + + edgePq.clear(); + edgePq.addAll(n.edges); + + while (!edgePq.isEmpty()) { + Edge e = edgePq.poll(); + + if (visited[e.to]) continue; + int newDis = dis[from] + e.weight; + if (newDis < dis[e.to]) { + dis[e.to] = newDis; + nodes[e.to].dis = dis[e.to]; + nodePq.add(nodes[e.to]); + } + + } + } + + } + + public static void print() { + System.out.println(ans); + } +} +```