ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
N๋ช ์ด ํ ์ค๋ก ์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ ๋, ๋ณผ ์ ์๋ ์ฌ๋์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๋ ์ฌ๋ A์ B๊ฐ ์๋ก ๋ณด๊ธฐ ์ํด์๋ A, B ์ฌ์ด์ ๋ ๋ณด๋ค ํค๊ฐ ํฐ ์ฌ๋์ด ์์ด์ผ ํ๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ `stack`์ ํ์ฉํ์ฌ, ํ์ฌ `top`๋ณด๋ค ํฐ ํค๊ฐ ์ ๋ ฅ๋๋ค๋ฉด, ์ดํ์ ์ ๋ ฅ๋๋ ๊ฐ์ ํ์ฌ์ `top`์ ๋ณผ ์ ์์ผ๋ฏ๋ก `pop`์ ํ์ฌ์ผ ํ๋ค. ์ด์ ๋ฐ๋์ ๊ฒฝ์ฐ ๋ผ๋ฉด `stack`์ ์ถ๊ฐํ๋ค. ์ฃผ์ํด์ผ ํ ๊ฒ์ ์ฐ์๋ ๋์ผํ ์ซ์๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด stack์ ์ถ๊ฐํ ๋ `(ํค, ์ฐ์๋ ํ์)`๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ค.
์ฝ๋
from sys import stdin
def solve():
stack = []
answer = 0
for h in height:
while stack and stack[-1][HEIGHT] < h:
answer += stack.pop()[CNT]
if not stack:
stack.append((h, 1))
else:
if stack[-1][HEIGHT] == h:
cnt = stack.pop()[CNT]
answer += cnt
if stack:
answer += 1
stack.append((h, cnt + 1))
else:
stack.append((h, 1))
answer += 1
return answer
if __name__ == '__main__':
HEIGHT, CNT = 0, 1
n = int(stdin.readline())
height = [int(stdin.readline()) for _ in range(n)]
print(solve())
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 2606 ๋ฐ์ด๋ฌ์ค (0) | 2020.10.04 |
---|---|
๋ฐฑ์ค: 16956 ๋๋์ ์ (0) | 2020.10.04 |
๋ฐฑ์ค: 9935 ๋ฌธ์์ด ํญ๋ฐ (0) | 2020.10.03 |
๋ฐฑ์ค: 2573 ๋น์ฐ (0) | 2020.10.02 |
๋ฐฑ์ค: 18405 ๊ฒฝ์์ ๊ฐ์ผ (0) | 2020.10.02 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ