From ca961c4a37d0bd77ea42f052d5a007dbdeacf80f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=83=81=EC=9D=BC?= Date: Wed, 22 Feb 2023 22:56:03 +0900 Subject: [PATCH 1/9] =?UTF-8?q?[5=EC=A3=BC=EC=B0=A8]=20=EC=A7=80=EC=83=81?= =?UTF-8?q?=EC=9D=BC=20=EB=B0=B1=EC=A4=80=206=EC=A3=BC=EC=B0=A8=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=202002,=209252,=2015486,=2015565=20=ED=92=80?= =?UTF-8?q?=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- study/week6/JUN15486_Jisangil.java | 45 ++++++++++++++++++ study/week6/JUN15565_Jisangil.java | 39 ++++++++++++++++ study/week6/JUN2002_Jisangil.java | 33 +++++++++++++ study/week6/JUN9252_Jisangil.java | 74 ++++++++++++++++++++++++++++++ 4 files changed, 191 insertions(+) create mode 100644 study/week6/JUN15486_Jisangil.java create mode 100644 study/week6/JUN15565_Jisangil.java create mode 100644 study/week6/JUN2002_Jisangil.java create mode 100644 study/week6/JUN9252_Jisangil.java diff --git a/study/week6/JUN15486_Jisangil.java b/study/week6/JUN15486_Jisangil.java new file mode 100644 index 0000000..6b6dad0 --- /dev/null +++ b/study/week6/JUN15486_Jisangil.java @@ -0,0 +1,45 @@ +package week6; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class JUN15486_Jisangil { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + int[][] dp = new int[n + 1][2]; + int[][] arr = new int[n + 1][2]; + for (int i = 1; i < n + 1; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int j = 0; j < 2; j++) { + + dp[i][j] = Integer.parseInt(st.nextToken()); + arr[i][j] = dp[i][j]; + if (arr[i][0] + i > n + 1) { + dp[i][1] = 0; + + } + } + } + + int max = 0; + for (int i = 1; i < n + 1; i++) { + int tmp = dp[i][0]; + int tmp1 = dp[Math.min(i + tmp, n)][0]; + for (int j = i + tmp; j <= i + tmp + tmp1; j++) { + if (j > n) { + break; + } + if (dp[j][0] + j <= n + 1) { + dp[j][1] = Math.max(dp[j][1], arr[j][1] + dp[i][1]); + } + + } + max = Math.max(max, dp[i][1]); + } + System.out.println(max); + } +} diff --git a/study/week6/JUN15565_Jisangil.java b/study/week6/JUN15565_Jisangil.java new file mode 100644 index 0000000..5d97796 --- /dev/null +++ b/study/week6/JUN15565_Jisangil.java @@ -0,0 +1,39 @@ +package week6; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.StringTokenizer; + +public class JUN15565_Jisangil { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + int n = Integer.parseInt(st.nextToken()); + int k = Integer.parseInt(st.nextToken()); + + + List lion = new ArrayList<>(); + st = new StringTokenizer(br.readLine()); + for (int i = 0; i < n; i++) { + int tmp = Integer.parseInt(st.nextToken()); + if (tmp == 1){ + lion.add(i); + } + } + if (k>lion.size()){ + System.out.println(-1); + return; + } + + int min = Integer.MAX_VALUE; + for (int i = 0; i <= lion.size()-k; i++) { + min = Math.min(min, lion.get(i + k - 1) - lion.get(i) + 1); + } + + System.out.println(min); + } +} diff --git a/study/week6/JUN2002_Jisangil.java b/study/week6/JUN2002_Jisangil.java new file mode 100644 index 0000000..1f0183d --- /dev/null +++ b/study/week6/JUN2002_Jisangil.java @@ -0,0 +1,33 @@ +package week6; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +public class JUN2002_Jisangil { + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + Map map = new HashMap<>(); + for (int i = 1; i <= n; i++) { + map.put(br.readLine(), i); + } + int[] add = new int[n + 1]; + int count = 0; + for (int i = 1; i <= n; i++) { + String tmp = br.readLine(); + int tmpValue = map.get(tmp); + if (tmpValue+add[map.get(tmp)] > i){ + count++; + for (int j = 1; j < tmpValue; j++) { + add[j]++; + } + } + } + + System.out.println(count); + + } +} diff --git a/study/week6/JUN9252_Jisangil.java b/study/week6/JUN9252_Jisangil.java new file mode 100644 index 0000000..78d4503 --- /dev/null +++ b/study/week6/JUN9252_Jisangil.java @@ -0,0 +1,74 @@ +package week6; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; + +public class JUN9252_Jisangil { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + String[] a = br.readLine().split(""); + String[] b = br.readLine().split(""); + int[] dp; + String[] sdp; + if (a.length < b.length) { + dp = new int[b.length]; + sdp = new String[b.length]; + for (int i = 0; i < a.length; i++) { + int tmp = 0; + String stmp = ""; + for (int j = 0; j < b.length; j++) { + if (tmp < dp[j]) { + tmp = dp[j]; + stmp = sdp[j]; + if (a[i].equals(b[j])){ + continue; + } + } + + if (a[i].equals(b[j])) { + dp[j] = tmp + 1; + sdp[j] = stmp + b[j]; + } + + } + } + } else { + dp = new int[a.length]; + sdp = new String[a.length]; + for (int i = 0; i < b.length; i++) { + int tmp = 0; + String stmp = ""; + for (int j = 0; j < a.length; j++) { + if (tmp < dp[j]) { + tmp = dp[j]; + stmp = sdp[j]; + if (b[i].equals(a[j])){ + continue; + } + } + + if (b[i].equals(a[j])) { + dp[j] = tmp + 1; + sdp[j] = stmp + a[j]; + } + } + } + } + int idx = 0; + int max = 0; + for (int i = 0; i < dp.length; i++) { + if (max < dp[i]) { + idx = i; + max = dp[i]; + } + } + + + System.out.println(dp[idx]); + if (dp[idx] != 0) { + System.out.println(sdp[idx]); + } + } +} From f4ddf059eec27328be636b07886b547b19ddaa2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=83=81=EC=9D=BC?= Date: Thu, 23 Feb 2023 21:28:37 +0900 Subject: [PATCH 2/9] =?UTF-8?q?[5=EC=A3=BC=EC=B0=A8]=20=EC=A7=80=EC=83=81?= =?UTF-8?q?=EC=9D=BC=20=EB=B0=B1=EC=A4=80=206=EC=A3=BC=EC=B0=A8=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=202616=20=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- study/week6/JUN2616_Jisangil.java | 52 +++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 study/week6/JUN2616_Jisangil.java diff --git a/study/week6/JUN2616_Jisangil.java b/study/week6/JUN2616_Jisangil.java new file mode 100644 index 0000000..729dbe2 --- /dev/null +++ b/study/week6/JUN2616_Jisangil.java @@ -0,0 +1,52 @@ +package week6; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class JUN2616_Jisangil { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + int[] arr = new int[n + 1]; + int[] dp = new int[n + 1]; + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int i = 1; i < n + 1; i++) { + arr[i] = Integer.parseInt(st.nextToken()); + dp[i] = arr[i] + dp[i - 1]; + } + int max = Integer.parseInt(br.readLine()); + + + int[][] dp2 = new int[n + 1][4]; + + int result = 0; + + for (int i = 1; i < 4; i++) { + for (int j = max; j < n + 1; j++) { + dp2[j][i] = Math.max(dp[j] - dp[j - max] + dp2[j - max][i - 1], dp2[j - 1][i]); + result = Math.max(result, dp2[j][3]); + } + + } + +// for (int i = max; i < n + 1; i++) { +// dp2[i][0] = dp[i]; +// for (int j = i - max; j >= 0; j--) { +//// dp2[i][0] = Math.max(dp2[i][0], dp2[j][0]); +// if (dp2[j][0] != 0) { +// dp2[i][1] = Math.max(dp2[i][1], dp[i] + dp2[j][0]); +// } +// if (dp2[j][1] != 0) { +// dp2[i][2] = Math.max(dp2[i][2], dp[i] + dp2[j][1]); +// } +// } +// result = Math.max(result, dp2[i][2]); +// } + +// System.out.println(Arrays.toString(dp)); +// Arrays.stream(dp2).forEach(a -> System.out.println(Arrays.toString(a))); + System.out.println(result); + } +} From ccbcafbd82522ed30e1e73495915d07c08a1cbb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=83=81=EC=9D=BC?= Date: Sun, 26 Feb 2023 22:05:56 +0900 Subject: [PATCH 3/9] =?UTF-8?q?[6=EC=A3=BC=EC=B0=A8]=20=EC=A7=80=EC=83=81?= =?UTF-8?q?=EC=9D=BC=20=EB=B0=B1=EC=A4=80=206=EC=A3=BC=EC=B0=A8=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=207453=20=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- study/week6/JUN7453_Jisangil.java | 74 +++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 study/week6/JUN7453_Jisangil.java diff --git a/study/week6/JUN7453_Jisangil.java b/study/week6/JUN7453_Jisangil.java new file mode 100644 index 0000000..c14231e --- /dev/null +++ b/study/week6/JUN7453_Jisangil.java @@ -0,0 +1,74 @@ +package week6; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class JUN7453_Jisangil { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int n = Integer.parseInt(br.readLine()); + int[][] arr = new int[4][n]; + + for (int i = 0; i < n; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int j = 0; j < 4; j++) { + arr[j][i] = Integer.parseInt(st.nextToken()); + } + } + int[] ab = new int[n * n]; + int[] cd = new int[n * n]; + int idx = 0; + for (Integer tmp : arr[0]) { + for (Integer tmp1 : arr[1]) { + ab[idx++] = tmp + tmp1; + } + } + + idx = 0; + for (Integer tmp : arr[2]) { + for (Integer tmp1 : arr[3]) { + cd[idx++] = tmp + tmp1; + } + } + + Arrays.sort(ab); + Arrays.sort(cd); + long count = 0; + int start = 0; + int last = cd.length - 1; + while (start < n * n && last >= 0) { + int a = ab[start]; + int b = cd[last]; + if (a + b > 0) { + last--; + } else if (a + b < 0) { + start++; + } else { + int aCount = 0; + for (int i = start; i < ab.length; i++) { + if (a == ab[i]) { + aCount++; + } else { + break; + } + } + int bCount = 0; + for (int i = last; i >= 0; i--) { + if (b == cd[i]) { + bCount++; + } else { + break; + } + } + count += (long) aCount * bCount; + start += aCount; + last -= bCount; + } + } + + System.out.println(count); + } +} \ No newline at end of file From ed1064e4123c259af9028ec508d0896406dfe16b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=83=81=EC=9D=BC?= <88275989+sangilji@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:22:19 +0900 Subject: [PATCH 4/9] Update JUN2002_Jisangil.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 주석 설명 --- study/week6/JUN2002_Jisangil.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/study/week6/JUN2002_Jisangil.java b/study/week6/JUN2002_Jisangil.java index 1f0183d..ed4bf81 100644 --- a/study/week6/JUN2002_Jisangil.java +++ b/study/week6/JUN2002_Jisangil.java @@ -10,19 +10,19 @@ public class JUN2002_Jisangil { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); - Map map = new HashMap<>(); + Map map = new HashMap<>(); //차와 현재 위치를 저장할 맵 for (int i = 1; i <= n; i++) { map.put(br.readLine(), i); } - int[] add = new int[n + 1]; + int[] add = new int[n + 1]; // 만약 4번이 1번위치로 올경우 1번은 2번이여야 하므로 더할 배열 int count = 0; for (int i = 1; i <= n; i++) { - String tmp = br.readLine(); - int tmpValue = map.get(tmp); - if (tmpValue+add[map.get(tmp)] > i){ - count++; + String tmp = br.readLine(); + int tmpValue = map.get(tmp); // 추월하기 전에 위치의 값 + if (tmpValue+add[map.get(tmp)] > i){ // 추월하기 전의 값과 몇대가 추월해서 누적된 값의 합보다 현재 위치가 작으면 + count++; // 카운트 증가 for (int j = 1; j < tmpValue; j++) { - add[j]++; + add[j]++; // 4번이 1번으로 올경우 1번부터 3번까지는 +1씩 누적해준다고 보면됨 } } } From f2ced37aff0b4fe854e7ba315e369c02d816cc2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=83=81=EC=9D=BC?= <88275989+sangilji@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:25:39 +0900 Subject: [PATCH 5/9] Update JUN15565_Jisangil.java --- study/week6/JUN15565_Jisangil.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/study/week6/JUN15565_Jisangil.java b/study/week6/JUN15565_Jisangil.java index 5d97796..937ab79 100644 --- a/study/week6/JUN15565_Jisangil.java +++ b/study/week6/JUN15565_Jisangil.java @@ -20,18 +20,18 @@ public static void main(String[] args) throws IOException { st = new StringTokenizer(br.readLine()); for (int i = 0; i < n; i++) { int tmp = Integer.parseInt(st.nextToken()); - if (tmp == 1){ + if (tmp == 1){ //라이언배열의 라이언 위치만 추가 lion.add(i); } } - if (k>lion.size()){ - System.out.println(-1); + if (k>lion.size()){ //라이언이 k개보다 적으면 + System.out.println(-1); // 리턴 return; } int min = Integer.MAX_VALUE; - for (int i = 0; i <= lion.size()-k; i++) { - min = Math.min(min, lion.get(i + k - 1) - lion.get(i) + 1); + for (int i = 0; i <= lion.size()-k; i++) { // 라이언의 위치가 0, 4, 6, 9 라고 하고 k가 3이라면 046과 469만 가능하므로 + min = Math.min(min, lion.get(i + k - 1) - lion.get(i) + 1); //k의 크기만큼에서 위치 빼주기 } System.out.println(min); From 924e4f72086760f91683e0f525a83f73dc16faa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=83=81=EC=9D=BC?= <88275989+sangilji@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:35:02 +0900 Subject: [PATCH 6/9] Update JUN15486_Jisangil.java --- study/week6/JUN15486_Jisangil.java | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/study/week6/JUN15486_Jisangil.java b/study/week6/JUN15486_Jisangil.java index 6b6dad0..bf2c00e 100644 --- a/study/week6/JUN15486_Jisangil.java +++ b/study/week6/JUN15486_Jisangil.java @@ -10,31 +10,31 @@ public class JUN15486_Jisangil { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); - int[][] dp = new int[n + 1][2]; - int[][] arr = new int[n + 1][2]; + int[][] dp = new int[n + 1][2]; // 누적할 배열 사실 1차원으로 만들어도됨 + int[][] arr = new int[n + 1][2]; // 입력받은 값을 넣을 배열 for (int i = 1; i < n + 1; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for (int j = 0; j < 2; j++) { dp[i][j] = Integer.parseInt(st.nextToken()); arr[i][j] = dp[i][j]; - if (arr[i][0] + i > n + 1) { - dp[i][1] = 0; + if (arr[i][0] + i > n + 1) { // 상담할 날이 퇴사할 날을 넘어가면 + dp[i][1] = 0; // dp값은 0 } } } int max = 0; - for (int i = 1; i < n + 1; i++) { - int tmp = dp[i][0]; - int tmp1 = dp[Math.min(i + tmp, n)][0]; - for (int j = i + tmp; j <= i + tmp + tmp1; j++) { - if (j > n) { + for (int i = 1; i < n + 1; i++) { //첫날부터 끝까지 + int tmp = dp[i][0]; // 현재 날짜 상담의 소요 날 + int tmp1 = dp[Math.min(i + tmp, n)][0]; // tmp의 소요날이 끝나는 날짜의 소요 날 n이 넘어갈경우엔 n으로 + for (int j = i + tmp; j <= i + tmp + tmp1; j++) { // 현재날의 상담이 끝나는 날부터 상담끝나는날의 소요날이 끝나는 날까지 + if (j > n) { //범위 넘어가면 break break; } - if (dp[j][0] + j <= n + 1) { - dp[j][1] = Math.max(dp[j][1], arr[j][1] + dp[i][1]); + if (dp[j][0] + j <= n + 1) { // 그날의 상담이 범위를 넘지 않는다면 + dp[j][1] = Math.max(dp[j][1], arr[j][1] + dp[i][1]); //현재 날과 가능한 그 다음 날들의 맥스 값 } } From 4bf736f127ba34d502876073c63fbb6a5810bbf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=83=81=EC=9D=BC?= <88275989+sangilji@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:48:03 +0900 Subject: [PATCH 7/9] Update JUN9252_Jisangil.java --- study/week6/JUN9252_Jisangil.java | 38 +++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/study/week6/JUN9252_Jisangil.java b/study/week6/JUN9252_Jisangil.java index 78d4503..e04499e 100644 --- a/study/week6/JUN9252_Jisangil.java +++ b/study/week6/JUN9252_Jisangil.java @@ -8,33 +8,33 @@ public class JUN9252_Jisangil { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - String[] a = br.readLine().split(""); - String[] b = br.readLine().split(""); - int[] dp; - String[] sdp; - if (a.length < b.length) { - dp = new int[b.length]; + String[] a = br.readLine().split(""); //첫번째 스트링 + String[] b = br.readLine().split(""); // 두번째 스트링 + int[] dp; // 누적할 디피 값 + String[] sdp; //누적할 문자열 + if (a.length < b.length) { // 만약 두번째 문자열이 길면 + dp = new int[b.length]; //긴 곳으로 dp 생성 sdp = new String[b.length]; - for (int i = 0; i < a.length; i++) { - int tmp = 0; - String stmp = ""; - for (int j = 0; j < b.length; j++) { - if (tmp < dp[j]) { - tmp = dp[j]; - stmp = sdp[j]; - if (a[i].equals(b[j])){ + for (int i = 0; i < a.length; i++) { //첫번째 문자열의 첫번째 문자부터 시작 + int tmp = 0; // 시작은 0으로 초기화 + String stmp = ""; // 문자열도 공백 + for (int j = 0; j < b.length; j++) { // 두번째 문자열을 전체 돔 + if (tmp < dp[j]) { //만약 dp값이 더크면 + tmp = dp[j]; // tmp를 올려줌 + stmp = sdp[j]; // 문자열도 추가 + if (a[i].equals(b[j])){ // 만약 dp값을 설정해주었는데 같은 문자열이면 맥스값으로만 설정하고 넘어감 continue; } } - if (a[i].equals(b[j])) { - dp[j] = tmp + 1; - sdp[j] = stmp + b[j]; + if (a[i].equals(b[j])) { // 만약 같은 문자열이면 + dp[j] = tmp + 1; // 현재 최고 값인 tmp를 현재 문자열 위치에 tmp+1 + sdp[j] = stmp + b[j]; //문자열도 현재 문자열 추가 } } } - } else { + } else { // 반대의 경우 똑같은 코드 dp = new int[a.length]; sdp = new String[a.length]; for (int i = 0; i < b.length; i++) { @@ -65,7 +65,7 @@ public static void main(String[] args) throws IOException { } } - + //max의 인덱스를 찾아 System.out.println(dp[idx]); if (dp[idx] != 0) { System.out.println(sdp[idx]); From d330685aca61c21b8174e531bf4414ec325015ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=83=81=EC=9D=BC?= <88275989+sangilji@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:56:19 +0900 Subject: [PATCH 8/9] Update JUN2616_Jisangil.java --- study/week6/JUN2616_Jisangil.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/study/week6/JUN2616_Jisangil.java b/study/week6/JUN2616_Jisangil.java index 729dbe2..26b3361 100644 --- a/study/week6/JUN2616_Jisangil.java +++ b/study/week6/JUN2616_Jisangil.java @@ -9,23 +9,27 @@ public class JUN2616_Jisangil { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); - int[] arr = new int[n + 1]; - int[] dp = new int[n + 1]; + int[] arr = new int[n + 1]; //입력받은 배열 + int[] dp = new int[n + 1]; // 누적할 배열 StringTokenizer st = new StringTokenizer(br.readLine()); for (int i = 1; i < n + 1; i++) { arr[i] = Integer.parseInt(st.nextToken()); - dp[i] = arr[i] + dp[i - 1]; + dp[i] = arr[i] + dp[i - 1]; // 누적합 } - int max = Integer.parseInt(br.readLine()); + int max = Integer.parseInt(br.readLine()); // 최대 칸수 입력 - int[][] dp2 = new int[n + 1][4]; + int[][] dp2 = new int[n + 1][4]; // dp 2차원 배열 int result = 0; - for (int i = 1; i < 4; i++) { - for (int j = max; j < n + 1; j++) { + for (int i = 1; i < 4; i++) { // 몇대를 이용했을 때의 최대값 구하는 반복문 + for (int j = max; j < n + 1; j++) { // 누적되있으므로 max부터 시작 max전에는 최대칸만큼 누적이 안됬기 때문 dp2[j][i] = Math.max(dp[j] - dp[j - max] + dp2[j - max][i - 1], dp2[j - 1][i]); + // dp[j] == 현재 칸까지 누적된 값이고, dp[j-max]는 최대 칸수외에 누적된 값을 빼준 값 + // dp2[j-max][i-1] 은 한대를 추가적으로 이용하기 전에 현재 칸 이전에 가능한 최대 값 + // dp2[j-1][i] 는 현재 칸 이전의 값 + result = Math.max(result, dp2[j][3]); } From 476ded06fe7051680fe52bb422e1cb193028b584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A7=80=EC=83=81=EC=9D=BC?= <88275989+sangilji@users.noreply.github.com> Date: Tue, 28 Feb 2023 12:05:37 +0900 Subject: [PATCH 9/9] Update JUN7453_Jisangil.java --- study/week6/JUN7453_Jisangil.java | 32 +++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/study/week6/JUN7453_Jisangil.java b/study/week6/JUN7453_Jisangil.java index c14231e..91db2d9 100644 --- a/study/week6/JUN7453_Jisangil.java +++ b/study/week6/JUN7453_Jisangil.java @@ -18,12 +18,12 @@ public static void main(String[] args) throws IOException { arr[j][i] = Integer.parseInt(st.nextToken()); } } - int[] ab = new int[n * n]; - int[] cd = new int[n * n]; + int[] ab = new int[n * n]; // ab를 합한 배열 + int[] cd = new int[n * n]; // cd를 합한 배열 int idx = 0; for (Integer tmp : arr[0]) { for (Integer tmp1 : arr[1]) { - ab[idx++] = tmp + tmp1; + ab[idx++] = tmp + tmp1; // ab가능한 값 만들기 } } @@ -34,19 +34,19 @@ public static void main(String[] args) throws IOException { } } - Arrays.sort(ab); + Arrays.sort(ab); // 정렬 Arrays.sort(cd); long count = 0; - int start = 0; - int last = cd.length - 1; + int start = 0; //ab의 시작지점 + int last = cd.length - 1; // cd의 시작지점 while (start < n * n && last >= 0) { - int a = ab[start]; - int b = cd[last]; - if (a + b > 0) { - last--; + int a = ab[start]; // 가장 작은 + int b = cd[last]; // 가장 큰 + if (a + b > 0) { // 합이 0보다 크면 + last--; // 큰 값 낮추기 } else if (a + b < 0) { - start++; - } else { + start++; // 작은 값 낮추기 + } else { // 같으면 int aCount = 0; for (int i = start; i < ab.length; i++) { if (a == ab[i]) { @@ -63,12 +63,12 @@ public static void main(String[] args) throws IOException { break; } } - count += (long) aCount * bCount; - start += aCount; + count += (long) aCount * bCount; // aCount는 ab 배열에서 같은 값의 개수 bCount도 마찬가지 가능한 개수만큼 더해줌 + start += aCount; //같은거 다음으로 증가 last -= bCount; } } - System.out.println(count); + System.out.println(count); // } -} \ No newline at end of file +}