From 6ff42e8385db98ea51610226e90dae848964c69b Mon Sep 17 00:00:00 2001 From: gani0325 Date: Sat, 11 Nov 2023 20:49:02 +0900 Subject: [PATCH] =?UTF-8?q?post:=20[5=EC=A3=BC=EC=B0=A8=5F=EC=9D=B4?= =?UTF-8?q?=EA=B0=80=EC=9D=80]=20=ED=8A=B8=EB=A6=AC=EC=9D=98=20=EC=88=9C?= =?UTF-8?q?=ED=9A=8C?= 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" | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 "_posts/algorithm/\355\212\270\353\246\254\354\235\230-\354\210\234\355\232\214/2023-10-29-\354\235\264\352\260\200\354\235\200-\355\212\270\353\246\254\354\235\230-\354\210\234\355\232\214.md" diff --git "a/_posts/algorithm/\355\212\270\353\246\254\354\235\230-\354\210\234\355\232\214/2023-10-29-\354\235\264\352\260\200\354\235\200-\355\212\270\353\246\254\354\235\230-\354\210\234\355\232\214.md" "b/_posts/algorithm/\355\212\270\353\246\254\354\235\230-\354\210\234\355\232\214/2023-10-29-\354\235\264\352\260\200\354\235\200-\355\212\270\353\246\254\354\235\230-\354\210\234\355\232\214.md" new file mode 100644 index 0000000..618fd34 --- /dev/null +++ "b/_posts/algorithm/\355\212\270\353\246\254\354\235\230-\354\210\234\355\232\214/2023-10-29-\354\235\264\352\260\200\354\235\200-\355\212\270\353\246\254\354\235\230-\354\210\234\355\232\214.md" @@ -0,0 +1,83 @@ +--- +title: ๐Ÿข ํŠธ๋ฆฌ์˜ ์ˆœํšŒ +author: gani0325 +date: 2023-10-29 20:00:00 +09:00 +categories: [์•Œ๊ณ ๋ฆฌ์ฆ˜, ํŠธ๋ฆฌ์˜ ์ˆœํšŒ] +tags: [์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋ฐฑ์ค€, ๊ณจ๋“œ1, ์žฌ๊ท€, 5์ฃผ์ฐจ, ์ด๊ฐ€์€] +render_with_liquid: false +--- + +## 1. ๋ฌธ์ œ ๋งํฌ + +[16509๋ฒˆ: ํŠธ๋ฆฌ์˜ ์ˆœํšŒ](https://www.acmicpc.net/problem/2263) + +
+ +## 2. ์ฝ”๋“œ + +`Python3` `72364KB` `412ms` + +```python +""" +[2263] ํŠธ๋ฆฌ์˜ ์ˆœํšŒ + +๐Ÿ’› ๋ฌธ์ œ +n๊ฐœ์˜ ์ •์ ์„ ๊ฐ–๋Š” ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ •์ ์— 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ค‘๋ณต ์—†์ด ๋งค๊ฒจ์ ธ ์žˆ๋‹ค. +์ด์™€ ๊ฐ™์€ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ธ์˜ค๋”์™€ ํฌ์ŠคํŠธ์˜ค๋”๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ํ”„๋ฆฌ์˜ค๋”๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. + +๐Ÿ’š ์ž…๋ ฅ +์ฒซ์งธ ์ค„์— n(1 โ‰ค n โ‰ค 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. +๋‹ค์Œ ์ค„์—๋Š” ์ธ์˜ค๋”๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” n๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๊ณ , +๊ทธ ๋‹ค์Œ ์ค„์—๋Š” ๊ฐ™์€ ์‹์œผ๋กœ ํฌ์ŠคํŠธ์˜ค๋”๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. + +๐Ÿ’™ ์ถœ๋ ฅ +์ฒซ์งธ ์ค„์— ํ”„๋ฆฌ์˜ค๋”๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. +""" + +# 1) ํ›„์œ„์ˆœํšŒ์—์„œ ๋งˆ์ง€๋ง‰์— ์˜ค๋Š” ๊ฐ’์€ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ +# 2) ์ค‘์œ„์ˆœํšŒ์—์„œ ๋ฃจํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์™€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ +# 3) ํ›„์œ„์ˆœํšŒ๋ฅผ ์ค‘์œ„์ˆœํšŒ์™€ ๊ฐ™์ด ๋‚˜๋ˆˆ ํ›„ ๊ฐ ์„œ๋ธŒ ํŠธ๋ฆฌ์—์„œ ๋งˆ์ง€๋ง‰์— ์˜ค๋Š” ๊ฐ’์€ ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ + +# ํŒŒ์ด์ฌ์˜ ์žฌ๊ท€ ์ตœ๋Œ€ ๊นŠ์ด์˜ ๊ธฐ๋ณธ ์„ค์ •์ด 1,000ํšŒ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ +import sys +sys.setrecursionlimit(10**9) +input = sys.stdin.readline + +n = int(input()) +inorder = list(map(int, input().split())) +postorder = list(map(int, input().split())) + +# inorder์˜ ๊ฐ’ index ๋ฆฌ์ŠคํŠธ +inorder_pos = [0] * (n+1) + +def preorder(inorder_s, inorder_e, postorder_s, postorder_e): + # ์žฌ๊ท€ํ•จ์ˆ˜ ์ข…๋ฃŒ ์กฐ๊ฑด + if (inorder_s > inorder_e) or (postorder_s > postorder_e): + return + + # ํ›„์œ„ ์ˆœํšŒ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ ์ถœ๋ ฅ + p = postorder[postorder_e] + print(p, end =' ') + + # ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ + left = inorder_pos[p] - inorder_s + + # ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ + right = inorder_e - inorder_pos[p] + + # ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ + preorder(inorder_s, inorder_s+left-1, postorder_s, postorder_s+left-1) + # ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ + preorder(inorder_e - right + 1, inorder_e, postorder_e - right, postorder_e - 1) + + +# ํ›„์œ„์ˆœํšŒ์˜ ๋งˆ์ง€๋ง‰๊ฐ’์ด ์ค‘์œ„์ˆœํšŒ ๋ช‡๋ฒˆ์งธ์— ์กด์žฌํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด +for i in range(n): + inorder_pos[inorder[i]] = i + +preorder(0, n-1, 0, n-1) +``` + +
+ +## 3. ํ•ด์„ค