๋ธ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ๊ณต๋ถํ๋ฉด์, ๋ฐฑ์ค ๋ฌธ์ ์๋ ์ ์ฉ์ ํด๋ณด์์ต๋๋ค! ๐ ๋ฐ๋ณต ์๋ฌ์ ํตํด ๋์ฑ ์ต์ํด์ง์! ๐
์ฐธ๊ณ ๋ก ํด๋น ๋ฌธ์ ๋ leet_code์์๋ ์ฐพ์ ์ ์์์ต๋๋ค. ํด๋น ๋ฌธ์ ๋ ์ ๋ฐ์ดํธํด๋ณด๊ฒ ์ต๋๋ค. ์ฃผ์๋ ์ ์ผ ์๋ reference์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
๐ Brute-force search
- ๊ทธ๋๋ก ํด์ํ๋ฉด "๋ฌด์ฐจ๋ณ ๋์ ๊ฒ์"
- ์๋ฏธ ๊ทธ๋๋ก, ๋ฌด์ฐจ๋ณ์ ์ผ๋ก ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์๋ํด ๋ณด๋ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ฅ ์์งํ ์๊ณ ๋ฆฌ์ฆ ์ ๊ทผ๋ฒ
- ์๋ฅผ ๋ค์ด, ๋น๋ฐ๋ฒํธ 4์๋ฆฌ ์๋ฌผ์ ๊ฐ ์๋ค๊ณ ํ๋ฉด, 0000๋ถํฐ 9999๊น์ง ์ ์ฒด๋ฅผ ๋ค ํ์ธํ๋ ๊ฒ!
์ด๋ฏธ์ง๋ ์ฌ๊ธฐ์์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๐ ์ฅ์
- ์ง๊ด์ ์ด๊ณ ๋ช ํํ๋ค
- ๋ต์ ํ์คํ๊ฒ ์ฐพ์ ์ ์๋ค
๐ต๐ซ ๋จ์
- ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ณด๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ โก๏ธ ์ธํ์ด ์ปค์ง์๋ก ๋นํจ์จ์ ๋๊ฐ๊ฐ ์ปค์ง๋ค!!!! ๐ฅ๐ฅ๐ฅ
โก๏ธ ๋นํจ์จ์ ์ธ๋ฐ ์ ์์์ผํ์งโ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ฐพ๊ธฐ ์ํ ๊ณ ๋ฏผ์ ์ถ๋ฐ์ ์ด ๋ฐ๋ก Brute Force! ๊ทธ๋์ ์ดํดํด์ผ ํฉ๋๋ค!๐
๋ฐฑ์ค 14719 [๋น๋ฌผ]
๐ Problem
https://www.acmicpc.net/problem/14719
๐ Submission Code
H, W = map(int, input().split())
buildings = list(map(int, input().split()))
def trapping_rain(buildings):
# ์ด ๋ด๊ธฐ๋ ๋น๋ฌผ์ ์์ ๋ณ์์ ์ ์ฅ
total_height = 0
# ๋ฆฌ์คํธ์ ๊ฐ ์ธ๋ฑ์ค์ ๋๋ฉด์ ํด๋น ์นธ์ ๋ด๊ธฐ๋ ๋น๋ฌผ์ ์์ ๊ตฌํ๋ค
# 0๋ฒ ์ธ๋ฑ์ค์ ์ ์ผ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ ๋นผ๊ณ ๋ฐ๋ณต๋ฌธ์ ๋๋ค
for i in range(1, len(buildings) - 1):
# ๋ฌผ์ด ์์ฐจ๊ธฐ๋๋ฌธ์ ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ชฝ์ ๊ฐ์ฅ ๋์ ๊ฑด๋ฌผ์ ์์น๋ฅผ ๊ตฌํ๋ค
max_left = max(buildings[:i]) # ํ์ฌ ์ธ๋ฑ์ค์ ์ผ์ชฝ์์ ๊ฐ์ฅ ๋์ ๊ฑด๋ฌผ์ ๋์ด
max_right = max(buildings[i:]) # ํ์ฌ ์ธ๋ฑ์ค์ ์ค๋ฅธ์ชฝ์์ ๊ฐ์ฅ ๋์ ๊ฑด๋ฌผ์ ๋์ด
# ํ์ฌ ์ธ๋ฑ์ค์ ๋น๋ฌผ์ด ๋ด๊ธธ ์ ์๋ ๋์ด : ๊ทธ ์ค ๋ ๋ฎ์ ๊ฑด๋ฌผ์ ๋์ด
upper_bound = min(max_left, max_right)
# ํ์ฌ ์ธ๋ฑ์ค์ ๋ด๊ธฐ๋ ๋น๋ฌผ์ ์์ ๊ณ์ฐ
# ์ํ ๋์ด์์ ํ์ฌ ์ธ๋ฑ์ค์ ์๋ ๊ฑด๋ฌผ์ ๋์ด๋ฅผ ๋นผ์ ๋ฌผ์ ๋์ด๋ฅผ ๊ตฌํ๊ณ total์ ๋ํด์ค๋ค
# ๋ง์ฝ upper_bound๊ฐ ํ์ฌ ์ธ๋ฑ์ค ๊ฑด๋ฌผ๋ณด๋ค ๋์ง ์๋ค๋ฉด, ํ์ฌ ์ธ๋ฑ์ค์ ๋ด๊ธฐ๋ ๋น๋ฌผ์ 0
total_height += max(0, upper_bound - buildings[i])
return total_height
print(trapping_rain(buildings))