From 36209117872619e869e27ac46f2e5edcdaf240ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EB=AF=BC=EC=A3=BC?= Date: Mon, 7 Apr 2025 11:58:44 +0900 Subject: [PATCH 1/7] add solution 0328 --- .../20250328/P2110.java" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "\355\225\234\353\257\274\354\243\274/20250328/P2110.java" diff --git "a/\355\225\234\353\257\274\354\243\274/20250328/P2110.java" "b/\355\225\234\353\257\274\354\243\274/20250328/P2110.java" new file mode 100644 index 0000000..3760554 --- /dev/null +++ "b/\355\225\234\353\257\274\354\243\274/20250328/P2110.java" @@ -0,0 +1,62 @@ +package algorithm; + +// 메모리: 39964 KB, 시간: 228 ms +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class P2110 { + static int n, c; + static int map[]; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + n = Integer.parseInt(st.nextToken()); + c = Integer.parseInt(st.nextToken()); + + map = new int[n]; + + for (int i = 0; i < n; i++) { + map[i] = Integer.parseInt(br.readLine()); + } + + Arrays.sort(map); + + int s = 1; + int e = (map[n - 1] - map[0] + 1); + int ans = 0; + while (s <= e) { + int mid = (s + e) / 2; + if (install(mid, 0, 1)) { + s = mid + 1; + if (ans < mid) { + ans = mid; + } else { + break; + } + } else { + e = mid - 1; + } + } + System.out.println(ans); + } + + static boolean install(int dis, int prev, int cnt) { + if (cnt == c) { + return true; + } + boolean result = false; + for (int i = prev + 1; i < n; i++) { + if(n-i < c-cnt) { + return false; + } + if (map[i] - map[prev] >= dis) { + result = install(dis, i, cnt + 1); + break; + } + } + return result; + } +} From 352f817df942d8fbaaf8dfb9fa44bf65416348e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EB=AF=BC=EC=A3=BC?= Date: Mon, 7 Apr 2025 11:59:23 +0900 Subject: [PATCH 2/7] add solution 0329 --- .../20250329/P1300.java" | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 "\355\225\234\353\257\274\354\243\274/20250329/P1300.java" diff --git "a/\355\225\234\353\257\274\354\243\274/20250329/P1300.java" "b/\355\225\234\353\257\274\354\243\274/20250329/P1300.java" new file mode 100644 index 0000000..78e186f --- /dev/null +++ "b/\355\225\234\353\257\274\354\243\274/20250329/P1300.java" @@ -0,0 +1,32 @@ +package algorithm; + +// 메모리: 11712 KB, 시간: 112 ms +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class P1300 { + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + long n = Long.parseLong(br.readLine()); + long k = Long.parseLong(br.readLine()); + + long e = n * n; + long s = 1; + while (s <= e) { + long mid = (s + e) / 2; +// System.out.println(mid); + long small = 0; + for (int i = 1; i <= n; i++) { + small += Math.min(mid / i, n); + } + if (small >= k) { + e = mid - 1; + } else { + s = mid + 1; + } + } + + System.out.println(s); + } + +} From 4f6e0603d3e7a57c77a0c6bbd5eaba6a5cd2c1ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EB=AF=BC=EC=A3=BC?= Date: Mon, 7 Apr 2025 11:59:49 +0900 Subject: [PATCH 3/7] add solution 0330 --- .../20250330/P12015.java" | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 "\355\225\234\353\257\274\354\243\274/20250330/P12015.java" diff --git "a/\355\225\234\353\257\274\354\243\274/20250330/P12015.java" "b/\355\225\234\353\257\274\354\243\274/20250330/P12015.java" new file mode 100644 index 0000000..664d62e --- /dev/null +++ "b/\355\225\234\353\257\274\354\243\274/20250330/P12015.java" @@ -0,0 +1,49 @@ +package algorithm; + +// 메모리: 146912 KB, 시간: 564 ms +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.StringTokenizer; + +public class P12015 { + static ArrayList list = new ArrayList(); + static int n; + + static int find(int newVal) { + int s = 0; + int e = list.size() - 1; + if (list.isEmpty()||newVal > list.get(e) ) + return -1; + while (s <= e) { + int mid = (s + e) / 2; + if (list.get(mid) == newVal) { + return mid; + } else if (list.get(mid) < newVal) { + s = mid + 1; + } else { + e = mid - 1; + } + } + return Math.max(s, e); + } + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + n = Integer.parseInt(br.readLine()); + StringTokenizer st = new StringTokenizer(br.readLine()); + + for (int i = 0; i < n; i++) { + int newVal = Integer.parseInt(st.nextToken()); + int idx = find(newVal); + if (idx == -1) { + list.add(newVal); + } else { + list.set(idx, newVal); + } + } + + System.out.println(list.size()); + } + +} From ecf7aabdd0627fe38d81a06632c4edc3e407b080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EB=AF=BC=EC=A3=BC?= Date: Mon, 7 Apr 2025 12:00:15 +0900 Subject: [PATCH 4/7] add solution 0331 --- .../20250331/P12738.java" | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 "\355\225\234\353\257\274\354\243\274/20250331/P12738.java" diff --git "a/\355\225\234\353\257\274\354\243\274/20250331/P12738.java" "b/\355\225\234\353\257\274\354\243\274/20250331/P12738.java" new file mode 100644 index 0000000..fdd9590 --- /dev/null +++ "b/\355\225\234\353\257\274\354\243\274/20250331/P12738.java" @@ -0,0 +1,46 @@ +package algorithm; + +// 메모리: 168748 KB, 시간: 668 ms +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.StringTokenizer; + +public class P12738 { + + public static void main(String[] args) throws Exception{ + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + int n = Integer.parseInt(br.readLine()); + + StringTokenizer st = new StringTokenizer(br.readLine()); + ArrayList list = new ArrayList<>(); + while(st.hasMoreTokens()) { + long a = Integer.parseInt(st.nextToken()); + + if(list.isEmpty() || a > list.get(list.size() - 1)) { + list.add(a); + continue; + } + int s = 0; + int e = list.size() - 1; + int idx = 0; + while(s <= e) { + int mid = (s + e) / 2; + if(list.get(mid) == a) { + idx = mid; + break; + }else if(list.get(mid) > a) { + idx = mid; + e = mid - 1; + }else { + s = mid + 1; + } + } + list.set(idx, a); + } + + System.out.println(list.size()); + } + +} From f39e932fc34b5eea4fb81aca2d10afcd5b49e28c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EB=AF=BC=EC=A3=BC?= Date: Mon, 7 Apr 2025 12:52:31 +0900 Subject: [PATCH 5/7] add solution 0402 --- .../20250402/P1197.java" | 88 +++++++++++++++++++ .../20250402/P1717.java" | 51 +++++++++++ 2 files changed, 139 insertions(+) create mode 100644 "\355\225\234\353\257\274\354\243\274/20250402/P1197.java" create mode 100644 "\355\225\234\353\257\274\354\243\274/20250402/P1717.java" diff --git "a/\355\225\234\353\257\274\354\243\274/20250402/P1197.java" "b/\355\225\234\353\257\274\354\243\274/20250402/P1197.java" new file mode 100644 index 0000000..6088dac --- /dev/null +++ "b/\355\225\234\353\257\274\354\243\274/20250402/P1197.java" @@ -0,0 +1,88 @@ +package algorithm; + +// 메모리: 47884 KB, 시간: 464 ms +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.HashSet; +import java.util.PriorityQueue; +import java.util.StringTokenizer; + +class Edge implements Comparable { + int from; + int to; + int weight; + + public Edge(int from, int to, int weight) { + super(); + this.from = from; + this.to = to; + this.weight = weight; + } + + @Override + public int compareTo(Edge o) { + return this.weight - o.weight; + } + +} + +public class P1197 { + static int union[]; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + int v = Integer.parseInt(st.nextToken()); + int e = Integer.parseInt(st.nextToken()); + PriorityQueue edges = new PriorityQueue<>(); + + for (int i = 0; i < e; i++) { + st = new StringTokenizer(br.readLine()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + int w = Integer.parseInt(st.nextToken()); + + Edge newE = new Edge(a, b, w); + edges.add(newE); + } + + int cnt = 0; + union = new int[v+1]; + for (int i = 1; i < v + 1; i++) { + union[i] = i; + } + int ans = 0; + while (true) { + Edge now = edges.poll(); +// System.out.println(now.from + " " + now.to); + if (find(now.from) == find(now.to)) + continue; + union[union[now.from]] = union[now.to]; + ans += now.weight; + cnt+=2; + if(cnt >= v) { + boolean noans = false; + for(int i = 2; i < v+1; i++) { + if(find(1) != find(i)) { + noans = true; + break; + } + } + if(!noans) { + break; + } + } + } + + System.out.println(ans); + } + + private static int find(int x) { + if (union[x] == x) + return x; + else { + return union[x] = find(union[x]); + } + } + +} diff --git "a/\355\225\234\353\257\274\354\243\274/20250402/P1717.java" "b/\355\225\234\353\257\274\354\243\274/20250402/P1717.java" new file mode 100644 index 0000000..83a1c83 --- /dev/null +++ "b/\355\225\234\353\257\274\354\243\274/20250402/P1717.java" @@ -0,0 +1,51 @@ +package algorithm; + +// 메모리: 51376 KB, 시간: 352ms +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class P1717 { + static int u[]; + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + int n = Integer.parseInt(st.nextToken()); + int m = Integer.parseInt(st.nextToken()); + StringBuilder sb = new StringBuilder(); + u = new int[n + 1]; + for (int i = 0; i <= n; i++) { + u[i] = i; + } + for (int i = 0; i < m; i++) { + st = new StringTokenizer(br.readLine()); + int cal = Integer.parseInt(st.nextToken()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + if (cal == 0) { + find(a); + u[find(b)] = u[a]; + } else { + find(a); + find(b); + if (u[a] == u[b]) { + sb.append("yes"); + } else { + sb.append("no"); + } + sb.append("\n"); + } + } + System.out.println(sb); + } + + static int find(int x) { + if (x != u[x]) { + return u[x] = find(u[x]); + } else { + return x; + } + } + +} From b35010723bb928c6483a7213d979bdab879207a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EB=AF=BC=EC=A3=BC?= Date: Tue, 15 Apr 2025 17:26:18 +0900 Subject: [PATCH 6/7] add solution 0315 --- .../20250315/P2156.java" | 50 ++++++++++++++++++ .../20250315/P21758.java" | 52 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 "\355\225\234\353\257\274\354\243\274/20250315/P2156.java" create mode 100644 "\355\225\234\353\257\274\354\243\274/20250315/P21758.java" diff --git "a/\355\225\234\353\257\274\354\243\274/20250315/P2156.java" "b/\355\225\234\353\257\274\354\243\274/20250315/P2156.java" new file mode 100644 index 0000000..224670f --- /dev/null +++ "b/\355\225\234\353\257\274\354\243\274/20250315/P2156.java" @@ -0,0 +1,50 @@ +package algorithm; +// 메모리: 13288 kb, 시간: 88ms +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class P2156 { + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + int wine[] = new int[n]; + int drink[][] = new int[n][2]; + + for (int i = 0; i < n; i++) { + wine[i] = Integer.parseInt(br.readLine()); + } + + if (n <= 2) { + int sum = 0; + for (int i = 0; i < n; i++) { + sum += wine[i]; + } + System.out.println(sum); + return; + } + for (int i = 0; i < n; i++) { + if (i == 0) { + drink[i][0] = wine[i]; + continue; + } + if (i == 1) { + drink[i][0] = wine[i]; + } + if (i > 1) { + drink[i][0] = Math.max(drink[i - 2][0] + wine[i], drink[i - 2][1] + wine[i]); + } + if (i > 2) { + drink[i][0] = Math.max(Math.max(drink[i][0], drink[i - 3][1] + wine[i]), drink[i - 3][0] + wine[i]); + } + drink[i][1] = drink[i - 1][0] + wine[i]; + } + + int ans = 0; + for (int i = n - 2; i < n; i++) { + ans = Math.max(ans, Math.max(drink[i][0], drink[i][1])); + } + System.out.println(ans); + } + +} diff --git "a/\355\225\234\353\257\274\354\243\274/20250315/P21758.java" "b/\355\225\234\353\257\274\354\243\274/20250315/P21758.java" new file mode 100644 index 0000000..2722aa8 --- /dev/null +++ "b/\355\225\234\353\257\274\354\243\274/20250315/P21758.java" @@ -0,0 +1,52 @@ +package algorithm; + +// 메모리: 25296kb, 시간: 192ms +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class P21758 { + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + + if (n == 3) { + StringTokenizer st = new StringTokenizer(br.readLine()); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + int c = Integer.parseInt(st.nextToken()); + System.out.println(Math.max(a, Math.max(b, c)) * 2); + return; + } + + int sum[] = new int[n]; + StringTokenizer st = new StringTokenizer(br.readLine()); + sum[0] = Integer.parseInt(st.nextToken()); + for (int i = 1; i < n; i++) { + sum[i] = sum[i - 1] + Integer.parseInt(st.nextToken()); + } + + int allSum = sum[n - 1]; + // 벌통이 오른쪽 끝에 있을 때 + int minus = allSum; + for (int i = 1; i < n - 1; i++) { + minus = Math.min(minus, sum[i] + sum[i] - sum[i - 1] + sum[0]); + if (sum[i] - sum[0] >= minus) { + break; + } + } + + // 벌통이 왼쪽 끝에 있을 때 + for (int i = n - 2; i > 0; i--) { + minus = Math.min(minus, sum[n - 1] - sum[i - 1] + sum[n - 1] - sum[n - 2] + sum[i] - sum[i - 1]); + if (sum[n - 1] - sum[i - 1] >= minus) { + break; + } + } + + System.out.println(allSum * 2 - minus); + + } + +} From 4e5651af7c91d412a644744b65564ad7b8d38da6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=9C=EB=AF=BC=EC=A3=BC?= Date: Tue, 15 Apr 2025 17:27:24 +0900 Subject: [PATCH 7/7] add solution 0317 --- .../20250317/P2616.java" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "\355\225\234\353\257\274\354\243\274/20250317/P2616.java" diff --git "a/\355\225\234\353\257\274\354\243\274/20250317/P2616.java" "b/\355\225\234\353\257\274\354\243\274/20250317/P2616.java" new file mode 100644 index 0000000..36ede01 --- /dev/null +++ "b/\355\225\234\353\257\274\354\243\274/20250317/P2616.java" @@ -0,0 +1,50 @@ +package algorithm; +// 메모리: 19992kb, 시간: 156ms + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class P2616 { + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + + int people[] = new int[n]; + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int i = 0; i < n; i++) { + people[i] = Integer.parseInt(st.nextToken()); + } + + int k = Integer.parseInt(br.readLine()); + + // 누적합 구하기 + int sum[] = new int[n]; + for (int i = 0; i < n; i++) { + if (i >= 1) + sum[i] += people[i] + sum[i - 1]; + else + sum[i] += people[i]; + if (i >= k) { + sum[i] -= people[i - k]; + } + } + + int dp[][] = new int[n][3]; + + // i번째 + for (int i = k - 1; i < n; i++) { + dp[i][0] = Math.max(dp[i - 1][0], sum[i]); + if (i - k > 0) { + dp[i][1] = Math.max(dp[i - 1][1], dp[i - k][0] + sum[i]); + dp[i][2] = Math.max(dp[i - 1][2], dp[i - k][1] + sum[i]); + } + } + + + + System.out.println(dp[n - 1][2]); + } + +}