๋ฌธ์
ํ์ด
์ ์ ์ํํ ๊ฒฐ๊ณผ
50 30 24 5 28 45 98 52 60
์ฒซ ๋ฒ์งธ ์์๊ฐ ๋ฃจํธ ๋ ธ๋ (์ ์ ์ํ์ ์ฑ์ง์ ์ํด)
์ผ์ชฝ ์๋ธ ํธ๋ฆฌ = ๋ฃจํธ ๋ ธ๋๋ณด๋ค ์์ ์์์ธ ๊ฒฝ์ฐ
์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ = ๋ฃจํธ ๋ ธ๋๋ณด๋ค ํฐ ์์์ ๊ฒฝ์ฐ
์ ์ ์ํ๋ฅผ ํ์ผ๋ฏ๋ก ๋ฃจํธ ๋ ธ๋๋ณด๋ค ํฐ ์์๊ฐ ๋์ค๋ ์ง์ ์ด ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ๋๋๋ ์ง์ ๊ณผ ๊ฐ๋ค.
50 30 24 5 28 45 98 52 60
์ด๋ก = ๋ฃจํธ ๋ ธ๋, ๋นจ๊ฐ = ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ, ํ๋ = ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ
์ ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํด ํ์ ์ํ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
์ฝ๋
import sys
sys.setrecursionlimit(10 ** 9)
input = sys.stdin.readline
pre = []
while True:
try:
pre.append(int(input()))
except:
break
def post(start, end):
if start > end:
return
mid = end + 1
for i in range(start + 1, end + 1):
if pre[i] > pre[start]:
mid = i
break
post(start + 1, mid - 1) #์ผ์ชฝ ํธ๋ฆฌ
post(mid, end) #์ค๋ฅธ์ชฝ ํธ๋ฆฌ
print(pre[start]) #๋ฃจํธ ๋
ธ๋
post(0, len(pre) - 1)
mid๋ฅผ end + 1๋ก ์ด๊ธฐํํ๋ ์ด์
๋ง์ฝ ๋ชจ๋ ์์๊ฐ ๋ฃจํธ ๋ ธ๋๋ณด๋ค ์์ ๊ฒฝ์ฐ
post(start + 1, mid - 1) : start + 1, end ๊ฐ ์ฝ์ , ์ฆ ๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ธํ ํธ๋ฆฌ
post(mid, end) : end + 1, end ๊ฐ ์ฝ์ ๋์ด if start > end: return์ ์ํด ๋ฆฌํด๋จ ์ด๋ ์ค๋ฅธ์ชฝ ๋ ธ๋๊ฐ ์์์ ์๋ฏธ
๋ง๋ฌด๋ฆฌ
์ฌ๊ท๋ ๋๋ฌด ๊น๋ค๋กญ๊ณ , ์ ์ด์ ๋ฌธ์ ์ ๊ทผ ๋ฐฉ์๋ ๋ชฐ๋ผ์ ์ฉ์ฉ ํค๋งค๋ค๊ฐ ๊ตฌ๊ธ๋ง ํด์ ๊ฒจ์ฐ ํ์๋ค...