๊ตํ : ํ๋๋ผ๊ณ ๊ฒ๋จน์ง ๋ง์
stack์ ์ด์ฉํด์ ํ์๋ค
stack ์ฝ์ : index์ ๋์ด(h)
์๋ฆฌ : ํ์ฌ index๋ณด๋ค stack์ ์๋ index(๋๋ณด๋ค ์ผ์ชฝ)์ h๊ฐ ๋ ํฌ๋ฉด ํ์ฌ index์ h๊ฐ์ผ๋ก ์ผ์ชฝ๋ ํฌํจํ ์ ์๋ค.
๋๋ณด๊ธฐ
์ฌ๊ธฐ์ ์ค๋ฅธ์ชฝ์ ๋์ด(2) ๋ก ์ผ์ชฝ์ ํฌํจํ์ฌ ๋์ด๊ฐ 4๊ฐ ๋ ์ ์๋ค.
์ด ์๋ฆฌ๋ฅผ ์ด์ฉํด stack์ผ๋ก ํ ์ ์์๋ค!
import sys
while True:
#๋ง์ง๋ง์ stack์ ์๋ ๊ฐ์๋ค ๋ค ๊บผ๋ด๊ธฐ ์ํด ๋ง์ง๋ง h๊ฐ์ 0
h = list(map(int, sys.stdin.readline().split())) + [0]
if h[0] == 0:
break
n = h[0]
stack = [(1,h[1])]
res = 0
for i in range(2,n+2):
w = i
#๋๋ณด๋ค stack์ ์๋ h๊ฐ ๋ ๋์ผ๋ฉด ๊บผ๋ด์ (๋์ ๋์ด * ๋๋น)
while stack and stack[-1][1] > h[i]:
w, hi = stack.pop()
res = max(res, (i-w)*hi)
stack.append((w, h[i]))
print(res)
์์ ๋ก ์คํํ์ ๋ res์ ๋ค์ด๊ฐ๋ ์ง์ฌ๊ฐํ์ ๋์ด
'๐ Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 2089 (0) | 2021.03.04 |
---|---|
[Python] ๋ฐฑ์ค 1442 (0) | 2021.02.25 |
[Python] ๋ฐฑ์ค 2606 (0) | 2020.09.01 |
[Python] ๋ฐฑ์ค 1260 (0) | 2020.08.27 |
[Python] ๋ฐฑ์ค 2231 (0) | 2020.05.03 |