From e6f4463e0e4a77eecc168512a9c37454d63b376e Mon Sep 17 00:00:00 2001 From: Jonghwan Lee <123362165+0224LJH@users.noreply.github.com> Date: Mon, 28 Jul 2025 23:52:36 +0900 Subject: [PATCH] =?UTF-8?q?[20250728]=20BOJ=20/=20G4=20/=20=EA=B0=80?= =?UTF-8?q?=EC=9E=A5=20=EA=B8=B4=20=EC=A6=9D=EA=B0=80=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=20=EC=88=98=EC=97=B4=204=20/=20=EC=9D=B4?= =?UTF-8?q?=EC=A2=85=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...353\266\204 \354\210\230\354\227\264 4.md" | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 "0224LJH/202507/28 BOJ \352\260\200\354\236\245 \352\270\264 \354\246\235\352\260\200\355\225\230\353\212\224 \353\266\200\353\266\204 \354\210\230\354\227\264 4.md" diff --git "a/0224LJH/202507/28 BOJ \352\260\200\354\236\245 \352\270\264 \354\246\235\352\260\200\355\225\230\353\212\224 \353\266\200\353\266\204 \354\210\230\354\227\264 4.md" "b/0224LJH/202507/28 BOJ \352\260\200\354\236\245 \352\270\264 \354\246\235\352\260\200\355\225\230\353\212\224 \353\266\200\353\266\204 \354\210\230\354\227\264 4.md" new file mode 100644 index 00000000..d9452e5f --- /dev/null +++ "b/0224LJH/202507/28 BOJ \352\260\200\354\236\245 \352\270\264 \354\246\235\352\260\200\355\225\230\353\212\224 \353\266\200\353\266\204 \354\210\230\354\227\264 4.md" @@ -0,0 +1,76 @@ +```java +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class Main { + + static int size, maxLen; + static int[] arr; + static int[] dp, ans; + + + public static void main(String[] args) throws IOException { + init(); + process(); + print(); + } + + private static void init() throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + size = Integer.parseInt(br.readLine()); + arr = new int[size]; + dp = new int[size]; + ans = new int[size]; + maxLen = 1; + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int i = 0; i < size; i++) { + arr[i] = Integer.parseInt(st.nextToken()); + } + } + + private static void process() { + for (int i = 0; i < size; i++) { + dp[i] = 1; + for (int j = 0; j < i; j++) { + if (arr[j] < arr[i]) { + dp[i] = Math.max(dp[i], dp[j] + 1); + } + } + maxLen = Math.max(maxLen, dp[i]); + } + + int lastIndex = -1; + for (int i = size - 1; i >= 0; i--) { + if (dp[i] == maxLen) { + lastIndex = i; + break; + } + } + + // 2. 역추적하면서 수열 구성 + int ansIndex = maxLen - 1; + int currentLen = maxLen; + + for (int i = lastIndex; i >= 0; i--) { + if (dp[i] == currentLen) { + ans[ansIndex--] = arr[i]; + currentLen--; + } + } + } + + private static void print() { + System.out.println(maxLen); + for (int i = 0; i < maxLen; i++) { + System.out.print(ans[i]); + if (i < maxLen - 1) System.out.print(" "); + } + System.out.println(); + } +} + + +``` \ No newline at end of file