https://www.acmicpc.net/problem/6198
6198๋ฒ: ์ฅ์ ์ ์ ๊พธ๋ฏธ๊ธฐ
๋ฌธ์ ๋์์๋ N๊ฐ์ ๋น๋ฉ์ด ์๋ค. ๋น๋ฉ ๊ด๋ฆฌ์ธ๋ค์ ๋งค์ฐ ์ฑ์ค ํ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์ ์ ์์ ๋ฒค์น๋งํน ํ๊ณ ์ถ์ดํ๋ค. i๋ฒ์งธ ๋น๋ฉ์ ํค๊ฐ hi์ด๊ณ , ๋ชจ๋ ๋น๋ฉ์ ์ผ๋ ฌ๋ก ์ ์๊ณ ์ค๋ฅธ์ชฝ์ผ
www.acmicpc.net
๋ฌธ์
๋์์๋ N๊ฐ์ ๋น๋ฉ์ด ์๋ค.
๋น๋ฉ ๊ด๋ฆฌ์ธ๋ค์ ๋งค์ฐ ์ฑ์ค ํ๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์ ์ ์์ ๋ฒค์น๋งํน ํ๊ณ ์ถ์ดํ๋ค.
i๋ฒ์งธ ๋น๋ฉ์ ํค๊ฐ hi์ด๊ณ , ๋ชจ๋ ๋น๋ฉ์ ์ผ๋ ฌ๋ก ์ ์๊ณ ์ค๋ฅธ์ชฝ์ผ๋ก๋ง ๋ณผ ์ ์๋ค.
i๋ฒ์งธ ๋น๋ฉ ๊ด๋ฆฌ์ธ์ด ๋ณผ ์ ์๋ ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์ ์ ์์ i+1, i+2, .... , N์ด๋ค.
๊ทธ๋ฐ๋ฐ ์์ ์ด ์์นํ ๋น๋ฉ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ๋น๋ฉ์ด ์์ผ๋ฉด ๊ทธ ๋ค์์ ์๋ ๋ชจ๋ ๋น๋ฉ์ ์ฅ์์ ๋ณด์ง ๋ชปํ๋ค.
์) N=6, H = {10, 3, 7, 4, 12, 2}์ธ ๊ฒฝ์ฐ
=
= =
= - =
= = = -> ๊ด๋ฆฌ์ธ์ด ๋ณด๋ ๋ฐฉํฅ
= - = = =
= = = = = =
10 3 7 4 12 2 -> ๋น๋ฉ์ ๋์ด
[1][2][3][4][5][6] -> ๋น๋ฉ์ ๋ฒํธ
- 1๋ฒ ๊ด๋ฆฌ์ธ์ 2, 3, 4๋ฒ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 2๋ฒ ๊ด๋ฆฌ์ธ์ ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 3๋ฒ ๊ด๋ฆฌ์ธ์ 4๋ฒ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 4๋ฒ ๊ด๋ฆฌ์ธ์ ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 5๋ฒ ๊ด๋ฆฌ์ธ์ 6๋ฒ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
- 6๋ฒ ๊ด๋ฆฌ์ธ์ ๋ง์ง๋ง์ด๋ฏ๋ก ๋ค๋ฅธ ๋น๋ฉ์ ์ฅ์์ ํ์ธํ ์ ์๋ค.
๋ฐ๋ผ์, ๊ด๋ฆฌ์ธ๋ค์ด ์ฅ์์ ์์ ํ์ธํ ์ ์๋ ์ด ์๋ 3 + 0 + 1 + 0 + 1 + 0 = 5์ด๋ค.
์ ๋ ฅ
- ์ฒซ ๋ฒ์งธ ์ค์ ๋น๋ฉ์ ๊ฐ์ N์ด ์ ๋ ฅ๋๋ค.(1 ≤ N ≤ 80,000)
- ๋ ๋ฒ์งธ ์ค ๋ถํฐ N+1๋ฒ์งธ ์ค๊น์ง ๊ฐ ๋น๋ฉ์ ๋์ด๊ฐ hi ์ ๋ ฅ๋๋ค. (1 ≤ hi ≤ 1,000,000,000)
์ถ๋ ฅ
- ๊ฐ ๊ด๋ฆฌ์ธ๋ค์ด ๋ฒค์น๋งํน์ด ๊ฐ๋ฅํ ๋น๋ฉ์ ์์ ํฉ์ ์ถ๋ ฅํ๋ค.

๋ฌธ์ ํ์ด
- ์์ฃผ ๋ดค๋ ์ ํ์ ๋ฌธ์ ๋ผ ์ ๊ทผ์ด ์ฌ์ ๋ค!
- ๊ฐ ๋น๋ฉ์ ๊ด๋ฆฌ์ธ์ด ์ค๋ฅธ์ชฝ์ ์์นํ ๋น๋ฉ๋ค๋ง ํ์ธํ ์ ์์ผ๋ฏ๋ก, ๋งจ ์ค๋ฅธ์ชฝ๋ถํฐ ๋น๋ฉ๋ถํฐ for๋ฌธ์ ์ด์ฉํด์ ์ ๊ทผํ๋ค.
- ์ฒ์์ ๋งจ ์ค๋ฅธ์ชฝ ๋น๋ฉ์ ๋์ด์ ๋ฒํธ๋ฅผ ์คํ์ ๋ฃ์ด๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก ์ผ์ชฝ ๋น๋ฉ๋ถํฐ for๋ฌธ์ ์ด์ฉํด์ ํ์์ ์์ํ๋ค.
- stack์ top์ ์์นํ ๋น๋ฉ์ด ์์ ๋ณด๋ค ๋ ๋์ ๋น๋ฉ์ด ๋ ๋๊น์ง stack์ popํ๊ณ popํ ๊ฐ์๋ฅผ ์ธ์ด์ค๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ popํ ๋น๋ฉ ์ค ํด๋น ๋น๋ฉ์์ ๋ณผ ์ ์๋ ๋น๋ฉ์ ๊ฐ์๋ฅผ ์ ์ฅํด๋์ ๋ฐฐ์ด ans์ ๊ฐ์ด 0๋ณด๋ค ํด ๊ฒฝ์ฐ ํ์ฌ ๋น๋ฉ์์๋ ํ์ธํ ์ ์์ง๋ง, ์ด์ ๊ณ์ฐ ๊ณผ์ ์์ pop๋ ๋น๋ฉ์ด ์กด์ฌํ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ํด๋น ๋น๋ฉ์ ans ๊ฐ์ pop_number์ ์ถ๊ฐ๋ก ๋ํด์ค๋ค.
- ๊ทธ๋ฆฌ๊ณ ์์ ๋ณด๋ค ์์ ๊ฑด๋ฌผ์ ๋ชจ๋ popํ ๋ค์ ํ์ฌ ๋น๋ฉ์ ๋์ด์ ๋ฒํธ๋ฅผ ์คํ์ ์ถ๊ฐํด์ค๋ค.
- ์ด๋ฌํ ๊ณผ์ ์ ๊ฑฐ์ณ ans์ ์ ์ฅ๋ ๊ฐ ๋น๋ฉ์์ ๋ณผ ์ ์๋ ๋น๋ฉ์ ๊ฐ์๋ฅผ ๋ชจ๋ ๋ํด์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
import sys
from collections import deque
n=int(sys.stdin.readline())
buildings=[int(sys.stdin.readline()) for _ in range(n)]
# ๊ฐ ๊ด๋ฆฌ์ธ์ด ๋ณผ ์ ์๋ ๋น๋ฉ์ ๊ฐ์
ans=[0]*n
stack=deque()
stack.append((buildings[-1], n-1))
for i in range(n-2,-1,-1):
# stack์ top๋ถํฐ ์์ํด์ ํ์ฌ ๋น๋ฉ์ ์์น๋ณด๋ค ์์ ๋น๋ฉ popํ๊ณ ans ๋ฐฐ์ด์ pop๋ ๊ฐ์๋งํผ ์ถ๊ฐ
# ans ๋ฐฐ์ด์ ํด๋น ๋น๋ฉ์ ๋ฒํธ์์ ๋ณผ ์ ์์์ง๋ง, ํด๋น ๋น๋ฉ๋ณด๋ค ์์์ pop๋ ๊ฐ์๋ ์ถ๊ฐํด์ค
pop_number=0
while stack and stack[-1][0]<buildings[i]:
height, num=stack.pop()
if ans[num]>0:
pop_number+=ans[num]
pop_number+=1
ans[i]=pop_number
# ์์ ๋ณด๋ค ์์ ๊ฑด๋ฌผ ๋ชจ๋ popํ ๋ค์ ์์ ์ถ๊ฐ
stack.append((buildings[i], i))
print(sum(ans))
'์๊ณ ๋ฆฌ์ฆ > ์ ํ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 17298 ๐ฅ] ์คํฐ์ (0) | 2023.10.07 |
---|---|
[๋ฐฑ์ค 11000 ๐ฅ] ๊ฐ์์ค ๋ฐฐ์ (1) | 2023.10.07 |
[๋ฐฑ์ค 1406 ๐ฅ] ์๋ํฐ (0) | 2023.09.28 |
[๋ฐฑ์ค 9549 ๐ฅ] ์ํธํ๋ ๋น๋ฐ๋ฒํธ (0) | 2023.08.24 |
[๋ฐฑ์ค 22866 ๐ฅ] ํ ๋ณด๊ธฐ (0) | 2023.08.15 |