๋ฐ์ํ
๐ค๋ฌธ์ ํด๊ฒฐ
-
G5 | ๊ตฌํ, ์๋ฎฌ๋ ์ด์
๋ฉฐ์น ์ nhn ์ฝํ ๋ฌธ์ ๋ ๋น์ทํ ๋ฌธ์ .
๊ทธ ๋๋ ์๋ฐ๋ก ํ์๊ธฐ๋ ํ๊ณ , ๋ ๋ณต์กํ๊ฒ ํผ๊ฑฐ๊ฐ๋ค.
๋ฑํ ์ด๋ ค์ด ๊ธฐ์ ์ ์๊ตฌํ๋ ๋ฌธ์ ๋ ์๋๋ค.
- ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ฉด์ ์์ ๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ์ ๋ธ๋ญ์ ์ฐพ๋๋ค.
- ๊ฐ๋ ์ค์ ์์ ๋ณด๋ค ๋ฎ์ง๋ง๊ฐ์ฅ ํฐ ๋์ ์ฐํด ๋๋๋ค.
- ์์ ๊ณผ์ ์ด ๋๋๋ฉด ์์ชฝ์ ๋ธ๋ญ์ค ๋ฎ์ ๋ธ๋ญ ๋งํผ์ ๋น๋ฌผ์ ์ฌ์ด์ ๋ธ๋ญ์ ์ฑ์ด๋ค.
๐ป์์ค ์ฝ๋
def find_block(x: int) -> int:
# ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ฉด์ ์์ ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๋ธ๋ญ์ ์ฐพ๋๋ค.
# ๊ฐ๋ ์ค์ ์์ ๋ณด๋ค ์์ง๋ง ๊ทธ ์ค์ ๊ฐ์ฅ ํฐ ๋์ ์ฐํด ๋๋๋ค.
max_block = [0, 0]
for j in range(x + 1, W):
if block[j] >= block[x]:
return j
if max_block[1] <= block[j]:
max_block[1] = block[j]
max_block[0] = j
return max_block[0]
def fill_rainwater(x: int, y: int) -> int:
# ์์ ๋ณด๋ค ๊ฐ๊ฑฐ๋ ํฐ๋์ด ์์ผ๋ฉด ์ฐํด๋์ ๋
์์ ๋์ด๋งํฐ ๋ฌผ์ ์ฑ์ด๋ค.
# ์์ ๋ณด๋ค ๊ฐ๊ฑฐ๋ ํฐ๋์ด ์์ผ๋ฉด ์์ ์ ๋์ด๋งํผ ๋ฌผ์ ์ฑ์ด๋ค.
rainwater = min(block[x], block[y])
cnt = 0
for j in range(x + 1, y):
cnt += rainwater - block[j]
block[j] = rainwater
return cnt
if __name__ == '__main__':
H, W = map(int, input().split()) # ์ธ๋ก ๊ฐ๋ก
block = list(map(int, input().split()))
answer = 0
i = 0
while i < W - 1:
b = find_block(i)
answer += fill_rainwater(i, b)
i = b
print(answer)
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋ฐ์ํ
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] SWEA - 10804. ๋ฌธ์์ด์ ๊ฑฐ์ธ์ (0) | 2020.11.01 |
---|---|
[python] ๋ฐฑ์ค - 1012. ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2020.10.31 |
[python] ๋ฐฑ์ค - 12865. ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2020.10.29 |
[python] ๋ฐฑ์ค - 1325. ํจ์จ์ ์ธ ํดํน (0) | 2020.10.28 |
[python] ๋ฐฑ์ค - 10773. ๊ดํธ (0) | 2020.10.27 |