From 0a2dd5f5fdb4b089a78b76ac1b3a78fb3379285b Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Mon, 14 Jul 2025 20:14:21 +0900 Subject: [PATCH] =?UTF-8?q?[20250714]=20BOJ=20/=20G1=20/=20=ED=8A=B8?= =?UTF-8?q?=EB=A6=AC=EC=9D=98=20=EC=88=9C=ED=9A=8C=20/=20=EC=9D=B4?= =?UTF-8?q?=EA=B0=95=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\354\235\230 \354\210\234\355\232\214.md" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "lkhyun/202507/14 BOJ G1 \355\212\270\353\246\254\354\235\230 \354\210\234\355\232\214.md" diff --git "a/lkhyun/202507/14 BOJ G1 \355\212\270\353\246\254\354\235\230 \354\210\234\355\232\214.md" "b/lkhyun/202507/14 BOJ G1 \355\212\270\353\246\254\354\235\230 \354\210\234\355\232\214.md" new file mode 100644 index 00000000..d049d2e2 --- /dev/null +++ "b/lkhyun/202507/14 BOJ G1 \355\212\270\353\246\254\354\235\230 \354\210\234\355\232\214.md" @@ -0,0 +1,50 @@ +```java +import java.util.*; +import java.io.*; + +public class Main{ + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + static StringTokenizer st; + static int N; + static int[] inOrder; + static int[] postOrder; + static int[] findInOrderIdxByValue; + + static int[] preOrder; + static int preOrderIdx = 1; + + public static void main(String[] args) throws Exception{ + N = Integer.parseInt(br.readLine()); + inOrder = new int[N+1]; + postOrder = new int[N+1]; + findInOrderIdxByValue = new int[N+1]; + preOrder = new int[N+1]; + + st = new StringTokenizer(br.readLine()); + for (int i = 1; i <= N; i++) { + inOrder[i] = Integer.parseInt(st.nextToken()); + findInOrderIdxByValue[inOrder[i]] = i; + } + st = new StringTokenizer(br.readLine()); + for (int i = 1; i <= N; i++) { + postOrder[i] = Integer.parseInt(st.nextToken()); + } + search(1,N,1,N); + for (int i = 1; i <= N; i++) { + bw.write(preOrder[i]+" "); + } + bw.close(); + } + static void search(int InStart, int InEnd, int PostStart, int PostEnd){ + if(PostStart > PostEnd) return; + int rootIdx = findInOrderIdxByValue[postOrder[PostEnd]]; + preOrder[preOrderIdx++] = postOrder[PostEnd]; + int leftSize = rootIdx - InStart; + int rightSize = InEnd - rootIdx; + + search(InStart, rootIdx-1,PostStart,PostStart+leftSize-1); + search(rootIdx+1, InEnd, PostEnd-rightSize, PostEnd-1); + } +} +```