[BOJ] 9465 ์คํฐ์ปค (Python / ํ์ด์ฌ)

๐งท ๋ฌธ์
https://www.acmicpc.net/problem/9465
๊ฐ ์คํฐ์ปค์ ์ ์๋ฅผ ๋งค๊ธฐ๊ณ , ์ ์์ ํฉ์ด ์ต๋๊ฐ ๋๊ฒ ์คํฐ์ปค๋ฅผ ๋ผ์ด๋ด๋ ๋ฌธ์ ์ด๋ค. (๋จ, ๋ ์คํฐ์ปค์ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ, ์, ์๋์ ์๋ ์คํฐ์ปค๋ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.)
๐ ํ์ด
์ด ๋ฌธ์ ๋ํ ํผ์ ํ๋ค๊ฐ ํด๊ฒฐํ์ง ๋ชปํด ๋ค๋ฅธ ์ฌ๋๋ค์ ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค.
์ฌ๋ฌ ์ฌ๋๋ค์ ํ์ด๋ฅผ ๋ณด๋๋ฐ๋ ์ดํด๊ฐ ํ๋ค์๋๋ฐ, ๊ฑฐ์ ๋ค ๊ฐ์ ํ์ด์ฌ์ ์กฐ๊ธ ๋ ์๊ฐ์ ํด๋ด์ผํ ๊ฒ ๊ฐ๋ค.
์ด ์ค ๋ด๊ฐ ์ดํดํ ์ฝ๋์ ํ์ด๋ ๋ ๊ฐ์ง๋ค.
1.
Step 1.
์คํฐ์ปค์ ์ ์ ๋ฆฌ์คํธ๋ฅผ ์
๋ ฅ๋ฐ์ ํ์, ์์ชฝ ์คํฐ์ปค๋ฅผ ๋ ๊ฒฝ์ฐ(up
), ์๋์ชฝ ์คํฐ์ปค๋ฅผ ๋ ๊ฒฝ์ฐ(down
), ์๋ฌด๊ฒ๋ ๋ผ์ง ์์ ๊ฒฝ์ฐ(non
) ์ธ ๊ฐ์ง๋ก ๋๋์ด ๊ฐ์ ๊ตฌํด๊ฐ๋ค.
Step 2.
for๋ฌธ์ ๋๋ฉด์ ์์ชฝ ์คํฐ์ปค๋ฅผ ๋ ๊ฒฝ์ฐ์๋ max(์ด์ ์ ์๋ ์คํฐ์ปค๋ฅผ ๋ ๊ฒฝ์ฐ, ์๋ฌด๊ฒ๋ ๋ผ์ง ์์ ๊ฒฝ์ฐ)
,
์๋์ชฝ ์คํฐ์ปค๋ฅผ ๋ ๊ฒฝ์ฐ์๋ max(์ด์ ์ ์์ชฝ ์คํฐ์ปค๋ฅผ ๋ ๊ฒฝ์ฐ, ์๋ฌด๊ฒ๋ ๋ผ์ง ์์ ๊ฒฝ์ฐ)
,
์๋ฌด๊ฒ๋ ๋ผ์ง ์์ ๊ฒฝ์ฐ์๋ max(์ด์ ์ ์์ชฝ ์คํฐ์ปค๋ฅผ ๋ ๊ฒฝ์ฐ, ์ด์ ์ ์๋ ์คํฐ์ปค๋ฅผ ๋ ๊ฒฝ์ฐ)
๋ก ๋๋์ด ๊ตฌํ๋ค.
for i in range(n): up, down, non = max(down, non) + stickers[0][i], max(up, non) + stickers[1][i], max(up, down)
Step 3.
์ด๋ ๊ฒ for๋ฌธ์ n๋ฒ ๋ชจ๋ ๋๊ฒ ๋๋ฉด ๊ทธ ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ด ์ฐ๋ฆฌ๊ฐ ๊ตฌํ๋ ๊ฐ์์ ์ ์ ์๋ค.
2.
Step 1.
์ ํ์์ ์ฐพ๊ธฐ๊ฐ ํ๋ค์๋๋ฐ, i๋ฒ์งธ ์ธ๋ฑ์ค์ DP table (dp[0][i], dp[1][i]
)์ ๊ฐ์ ํ, i-1๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฐ์ ๊ทธ๋๋ก ๊ฐ๊ฑฐ๋ ๋๊ฐ์ ์ ์์นํ i-1๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฐ์ ํด๋น stickers
์ ์๋ฅผ ๋ํด์ค ๊ฐ์ ๋น๊ตํด ๋ ํฐ ๊ฐ์ ๊ฐ๋๋ค.
Step 2.
์ฆ, ์ ํ์์ dp[0][i] = max(dp[0][i-1], dp[1][i-1] + stickers[0][i]), dp[1][i] = max(dp[1][i-1], dp[0][i-1] + stickers[1][i])
์ด๋ค.
๋๋์
์ฑ์ ์ ํด๋ณธ ํ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ๊ฑธ๋ฆฐ ์๊ฐ์ ๋น๊ตํด๋ณด๋ฉด ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ด ๋ชจ๋ ์ธก๋ฉด์์ ํจ์จ์ ์ธ ๊ฒ์ ๋ณผ ์ ์์๋ค.
๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ ์ ํ ์ ํ์์ ๋น ๋ฅด๊ฒ ์ฐพ๋ ๊ฒ์ด ์ค์ํ ๊ฒ ๊ฐ๋ค.
์ด ๋ฌธ์ ๋ Solved.ac ๊ธฐ์ค ์ค๋ฒ 2์ ๋์ด๋์ธ๋ฐ, ์ด๋ ๊ฒ ๊ณ ์ํ ๊ฑด ๋ ๋ง์ด ํ์ด๋ณด๋ฉด์ ๋ณด์ํด์ผ ํ ์ ์ธ ๊ฒ ๊ฐ๋ค.
๐ ๋์ ์ฝ๋
######1.###### import sys if __name__ == "__main__": t = int(input()) for _ in range(t): n = int(input()) dp = [[0] * n for _ in range(2)] stickers = [] for _ in range(2): stickers.append(list(map(int, input().split()))) up, down, none = 0, 0, 0 for i in range(n): up, down, none = max(down, none) + stickers[0][i], max(up, none) + stickers[1][i], max(up, down) print(max(up, down, none)) ######2.###### import sys if __name__ == "__main__": t = int(input()) for _ in range(t): n = int(input()) dp = [[0] * n for _ in range(2)] stickers = [] for _ in range(2): stickers.append(list(map(int, input().split()))) dp[0][0], dp[1][0] = stickers[0][0], stickers[1][0] for i in range(1, n): dp[0][i] += max(dp[0][i-1], dp[1][i-1] + stickers[0][i]) dp[1][i] += max(dp[1][i-1], dp[0][i-1] + stickers[1][i]) print(max(dp[0][n-1], dp[1][n-1]))
'Algorithm > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 13398 ์ฐ์ํฉ 2 (Pyhton / ํ์ด์ฌ) (0) | 2021.08.23 |
---|---|
[BOJ] 2225 ํฉ๋ถํด (Python / ํ์ด์ฌ) (0) | 2021.08.17 |
[BOJ] 1699 ์ ๊ณฑ์์ ํฉ (Pyhton / ํ์ด์ฌ) (0) | 2021.08.17 |
[BOJ] 11053 ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (Pyhton / ํ์ด์ฌ) (0) | 2021.08.04 |
[BOJ] 10844 ์ฌ์ด ๊ณ๋จ ์ (Python / ํ์ด์ฌ) (0) | 2021.08.04 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[BOJ] 13398 ์ฐ์ํฉ 2 (Pyhton / ํ์ด์ฌ)
[BOJ] 13398 ์ฐ์ํฉ 2 (Pyhton / ํ์ด์ฌ)
2021.08.23 -
[BOJ] 2225 ํฉ๋ถํด (Python / ํ์ด์ฌ)
[BOJ] 2225 ํฉ๋ถํด (Python / ํ์ด์ฌ)
2021.08.17 -
[BOJ] 1699 ์ ๊ณฑ์์ ํฉ (Pyhton / ํ์ด์ฌ)
[BOJ] 1699 ์ ๊ณฑ์์ ํฉ (Pyhton / ํ์ด์ฌ)
2021.08.17 -
[BOJ] 11053 ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (Pyhton / ํ์ด์ฌ)
[BOJ] 11053 ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (Pyhton / ํ์ด์ฌ)
2021.08.04
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.