[python] ๋ฐฑ์ค - 2240. ์๋๋๋ฌด
๐ค๋ฌธ์ ํด๊ฒฐ
S1 | ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
1. ๋ต์ X์ด์ Y๋ฒ ์์ง์ฌ์ ๋จน์ ์ต๋์ ์๋ ๊ฐฏ์! ๋ณ์๊ฐ 2๊ฐ์ด๋ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค.
๋ค๋ฅธ ๋ถ๋ค์ ๋ต์ ๋ณด๋ฉด ์๋(์ฌ๋ ํท๊ฐ๋ฆผ)์ ์์น๊น์ง ์ ์ฅํ์ฌ 3์ฐจ์์ผ๋ก ๋ง๋ ๋ค.
ํ์ง๋ง ์ด๋ ํ์์ ๋ฐ๋ผ ์๋(์ฌ๋)์ ์์น๋ ์ ์ ๋ก ์ ํด์ง๋ค.
ํ์๋ฒ ์์ง์ด๋ฉด 2๋ฒ ๋๋ฌด์, ์ง์๋ฒ ์์ง์ด๋ฉด 1๋ฒ ๋๋ฌด์ ์๋ค.
2. ํ์ ์ด(0~์๋๊ฐฏ์) ์ด์ ์์ง์ผ ์ ์๋ ํ์(0~W) ๋งํผ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ ๋ค.
dp์ 0๋ฒ์งธ ํ์ 0์ด๋, 0๋ฒ์งธ ์ด์ ์์ง์ด์ง ์์์ ๋
3. %์ค์%
(1) ๋ฐ์ ๋จน๋ ์กฐ๊ฑด:
a. i์ด์ ์๋๊ฐ 1๋ฒ์์ ๋จ์ด์ง๊ณ ์ด๋ ํ์๊ฐ ์ง์(j % 2 == 0, 1๋ฒ ๋๋ฌด์ ์์น)ํ๋ฉด
b. i์ด์ ์๋๊ฐ 2๋ฒ์์ ๋จ์ด์ง๊ณ ์ด๋ ํ์๊ฐ ํ์(j % 2 == 1, 2๋ฒ ๋๋ฌด์ ์์น)ํ๋ฉด
i-1์ด ๋ j๋ฒ ์งธ ์์น์ ์๋ ์์ i-1์ด ๋ j-1๋ฒ ์งธ ์์น์ ์๋ ์ ์ค ํฐ ๊ฐ์ + 1ํ์ฌ dp[i][j]๋ฅผ ์ฑ์ด๋ค.
(2) ์ ๋จน๋ ์กฐ๊ฑด:
a. i์ด์ ์๋์ ์๋(์ฌ๋)์ด ์๊ฐ๋ฆด ๋
i-1์ด ๋ j-1, j ๋ฒ ์งธ์ max๊ฐ์ ๋ฃ์ผ๋ฉด ๋๋ค.

๐จ DP๋ ์ ํ์์ ์ธ์ฐ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค!
๐ป์์ค ์ฝ๋
import sys
if __name__ == "__main__":
T, W = map(int, input().split())
plums = [0]
for i in range(T):
plums.append(int(sys.stdin.readline()))
dp = [[0]*(W+1) for _ in range(T+1)]
for i in range(1, T+1):
# ํ๋ฒ๋ ์์ง์ด์ง ์์์ ๋(dp[i][0]์ ์ฑ์ฐ๋ ๊ณผ์ )
if plums[i] == 1: # ์๋๊ฐ 1๋ฒ์์ ๋จ์ด์ง ๋๋ง ๋ฐ์ ๋จน์ ์ ์๋ค.
dp[i][0] = dp[i-1][0] + 1
else:
dp[i][0] = dp[i-1][0]
# ์ด๋ ํ์๋ฅผ 1๋ฒ๋ถํฐ W ๋ฒ๊น์ง ์์ง์ด๋ฉด์ ์ฒดํฌ
for j in range(1, W+1):
if j > i:
break
# ์๋๊ฐ 1๋ฒ์์ ๋จ์ด์ง๊ณ , ๊ทธ๊ฒ์ ๋ฐ์ ๋จน๊ธฐ
if plums[i] == 1 and j % 2 == 0:
# ์์ง์ฌ์ ๋ฐ์๋จน์ ๊ฒ์ธ๊ฐ, ํ์ฌ์์น์์ ๋ฐ์๋จน์ ๊ฒ์ธ๊ฐ
# ์ด์งํผ ์ด๋ํ ํ์๋ ๊ฐ๋ค(์ง๊ธ ์ด๋ํ๊ฑฐ๋ ์ด์ ์ ์ด๋ํ๊ฑฐ๋)
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + 1
# ์๋๊ฐ 2๋ฒ์์ ๋จ์ด์ง๊ณ , ๊ทธ๊ฒ์ ๋ฐ์ ๋จน๊ธฐ
elif plums[i] == 2 and j % 2 == 1:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + 1
# ๊ทธ ์ธ - ์๋จน๋๋ค - ๊ทธ๋๋ก ์๊ฑฐ๋ ์์ง์ฌ์ ์๋จน์
else:
dp[i][j] = max(dp[i-1][j], dp[i-1][j-1])
print(max(dp[-1]))
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: BACKJOON ONLINE JUDGE
๋งํฌ: https://www.acmicpc.net/problem/2240
2240๋ฒ: ์๋๋๋ฌด
์๋๋ ์๋๋ฅผ ์ข์ํ๋ค. ๊ทธ๋์ ์ง์ ์๋๋๋ฌด๋ฅผ ์ฌ์ด๋๊ณ , ์ฌ๊ธฐ์ ์ด๋ฆฌ๋ ์๋๋ฅผ ๋จน๊ณ ๋ ํ๋ค. ํ์ง๋ง ์๋๋ ํค๊ฐ ์์์ ์๋๋ฅผ ๋ฐ๋จน์ง๋ ๋ชปํ๊ณ , ์๋๊ฐ ๋จ์ด์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ๋ค์์ ๋จ์ด
www.acmicpc.net
๋ฌธ์
์๋๋ ์๋๋ฅผ ์ข์ํ๋ค. ๊ทธ๋์ ์ง์ ์๋๋๋ฌด๋ฅผ ์ฌ์ด๋๊ณ , ์ฌ๊ธฐ์ ์ด๋ฆฌ๋ ์๋๋ฅผ ๋จน๊ณ ๋ ํ๋ค. ํ์ง๋ง ์๋๋ ํค๊ฐ ์์์ ์๋๋ฅผ ๋ฐ๋จน์ง๋ ๋ชปํ๊ณ , ์๋๊ฐ ๋จ์ด์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ๋ค์์ ๋จ์ด์ง๋ ์๋๋ฅผ ๋ฐ์์ ๋จน๊ณ ๋ ํ๋ค. ์๋๋ฅผ ์ก์ ๋์๋ ์๋๊ฐ ํ๊ณต์ ์์ ๋ ์ก์์ผ ํ๋๋ฐ, ์ด๋ ์๋๊ฐ ๋ง๋๋ง๋ํ์ฌ ๋ฐ๋ฅ์ ๋จ์ด์ง๋ฉด ๋ชป ๋จน์ ์ ๋๋ก ๋ญ๊ฐ์ง๊ธฐ ๋๋ฌธ์ด๋ค.
๋งค ์ด๋ง๋ค, ๋ ๊ฐ์ ๋๋ฌด ์ค ํ๋์ ๋๋ฌด์์ ์ด๋งค๊ฐ ๋จ์ด์ง๊ฒ ๋๋ค. ๋ง์ฝ ์ด๋งค๊ฐ ๋จ์ด์ง๋ ์๊ฐ, ์๋๊ฐ ๊ทธ ๋๋ฌด์ ์๋์ ์ ์์ผ๋ฉด ์๋๋ ๊ทธ ์ด๋งค๋ฅผ ๋ฐ์๋จน์ ์ ์๋ค. ๋ ๊ฐ์ ๋๋ฌด๋ ๊ทธ๋ค์ง ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ง ์๊ธฐ ๋๋ฌธ์, ์๋๋ ํ๋์ ๋๋ฌด ์๋์ ์ ์๋ค๊ฐ ๋ค๋ฅธ ๋๋ฌด ์๋๋ก ๋น ๋ฅด๊ฒ(1์ด๋ณด๋ค ํจ์ฌ ์งง์ ์๊ฐ์) ์์ง์ผ ์ ์๋ค. ํ์ง๋ง ์๋๋ ์ฒด๋ ฅ์ด ๊ทธ๋ค์ง ์ข์ง ๋ชปํด์ ๋ง์ด ์์ง์ผ ์๋ ์๋ค.
์๋๋ T(1โคTโค1,000)์ด ๋์ ๋จ์ด์ง๊ฒ ๋๋ค. ์๋๋ ์ต๋ W(1โคWโค30)๋ฒ๋ง ์์ง์ด๊ณ ์ถ์ด ํ๋ค. ๋งค ์ด๋ง๋ค ์ด๋ ๋๋ฌด์์ ์๋๊ฐ ๋จ์ด์ง์ง์ ๋ํ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, ์๋๊ฐ ๋ฐ์ ์ ์๋ ์๋์ ๊ฐ์๋ฅผ ๊ตฌํด๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ์๋๋ 1๋ฒ ์๋๋๋ฌด ์๋์ ์์นํด ์๋ค๊ณ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ์ ์ T, W๊ฐ ์ฃผ์ด์ง๋ค. ๋ค์ T๊ฐ์ ์ค์๋ ๊ฐ ์๊ฐ์ ์๋๊ฐ ๋จ์ด์ง๋ ๋๋ฌด์ ๋ฒํธ๊ฐ 1 ๋๋ 2๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์๋๊ฐ ๋ฐ์ ์ ์๋ ์๋์ ์ต๋ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.