From e5aa8e04c217e881be62e66b71afe8f4ea968a22 Mon Sep 17 00:00:00 2001 From: DYM772 Date: Tue, 28 Jun 2022 20:19:34 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EB=B0=B1=EC=A4=80=207453=20=ED=95=A9?= =?UTF-8?q?=EC=9D=B4=200=EC=9D=B8=20=EB=84=A4=20=EC=A0=95=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../week38(220628)/BJ7453.java" | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 "src/\352\271\200\353\217\204\355\230\204/week38(220628)/BJ7453.java" diff --git "a/src/\352\271\200\353\217\204\355\230\204/week38(220628)/BJ7453.java" "b/src/\352\271\200\353\217\204\355\230\204/week38(220628)/BJ7453.java" new file mode 100644 index 0000000..2048e3b --- /dev/null +++ "b/src/\352\271\200\353\217\204\355\230\204/week38(220628)/BJ7453.java" @@ -0,0 +1,70 @@ +package bj; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class BJ7453 { + /* 7453. 합이 0인 네 정수 + 정렬 + */ + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + int N = Integer.parseInt(br.readLine()); + int[] A = new int[N]; + int[] B = new int[N]; + int[] C = new int[N]; + int[] D = new int[N]; + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + A[i] = Integer.parseInt(st.nextToken()); + B[i] = Integer.parseInt(st.nextToken()); + C[i] = Integer.parseInt(st.nextToken()); + D[i] = Integer.parseInt(st.nextToken()); + } + + int[] AB = new int[N*N]; + int[] CD = new int[N*N]; + for (int i = 0; i < N; i++) { + for (int j = 0; j < N; j++) { + AB[N*i+j] = A[i] + B[j]; + CD[N*i+j] = -(C[i] + D[j]); + } + } + Arrays.sort(AB); + Arrays.sort(CD); + + long result = 0; + int i = 0; + int j = 0; + long lCnt = 0; + long rCnt = 0; + while (i < N*N-1 || j < N*N-1){ + if (AB[i] == CD[j]) { + lCnt = 1; + rCnt = 1; + while (i+1 < N*N && AB[i+1] == AB[i]) { + lCnt++; + i++; + } + while (j+1 < N*N && CD[j+1] == CD[j]) { + rCnt++; + j++; + } + result += (lCnt * rCnt); + if (i+1 < N*N) i++; + if (j+1 < N*N) j++; + continue; + } + + if (i == N*N-1) j++; + else if (j == N*N-1) i++; + else if (AB[i] > CD[j]) j++; + else if (AB[i] < CD[j]) i++; + } + System.out.println(result); + } +} From e2c215ce66096340c53e44b13d42bf58f3b1a6b3 Mon Sep 17 00:00:00 2001 From: DYM772 Date: Tue, 28 Jun 2022 20:19:55 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=EB=B0=B1=EC=A4=80=2011054=20=EA=B0=80?= =?UTF-8?q?=EC=9E=A5=20=EA=B8=B4=20=EB=B0=94=EC=9D=B4=ED=86=A0=EB=8B=89=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=20=EC=88=98=EC=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../week38(220628)/BJ11054.java" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "src/\352\271\200\353\217\204\355\230\204/week38(220628)/BJ11054.java" diff --git "a/src/\352\271\200\353\217\204\355\230\204/week38(220628)/BJ11054.java" "b/src/\352\271\200\353\217\204\355\230\204/week38(220628)/BJ11054.java" new file mode 100644 index 0000000..a152631 --- /dev/null +++ "b/src/\352\271\200\353\217\204\355\230\204/week38(220628)/BJ11054.java" @@ -0,0 +1,34 @@ +package bj; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class BJ11054 { + /* 11054. 가장 긴 바이토닉 부분 수열 + DP + */ + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + StringTokenizer st = new StringTokenizer(br.readLine()); + int[] arr = new int[N]; + for (int i = 0; i < N; i++) arr[i] = Integer.parseInt(st.nextToken()); + int[] forward = new int[N]; + int[] reverse = new int[N]; + Arrays.fill(forward, 1); + Arrays.fill(reverse, 1); + + for (int i = 1; i < N; i++) { + for (int j = 0; j < i; j++) { + if (arr[i] > arr[j] && forward[j] + 1 > forward[i]) forward[i] = forward[j] + 1; + if (arr[N-1-i] > arr[N-1-j] && reverse[N-1-j] + 1 > reverse[N-1-i]) reverse[N-1-i] = reverse[N-1-j] + 1; + } + } + int result = 0; + for (int i = 0; i < N; i++) result = Math.max(result, forward[i] + reverse[i] - 1); + System.out.println(result); + } +}