11048๋ฒ - ์ด๋ํ๊ธฐ
๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง๊ณ ๊ฐ ๋ฏธ๋ก์ ์นธ์ ์ฌํ์ด ๋์ฌ์๋ค๊ณ ๊ฐ์ ํ ๋, ๋ฆฌ์คํธ (0,0) ์์ (N,M)๊น์ง ๊ฐ๋๋ฐ ์ฃผ์ธ ์ ์๋ ์ฌํ์ ์ต๋๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
์ธ๋ป ๋ณด๋ฉด BFS๋ฅ๋ผ๊ณ ์๊ฐํ ์ ์์ผ๋ DP๋ก ํด๊ฒฐ ๊ฐ๋ฅํฉ๋๋ค.
์ด์ ์ ๋ 14494๋ฒ์ ํตํด ์ด์ฐจ์ ๋ฆฌ์คํธ์์ DP๋ก ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ตํ์ต๋๋ค.
์ด ๋ฌธ์ ๋ ๊ทธ๋ฌํ ๋ฐฉ์์ผ๋ก ์ ์๊ฐํด๋ณด๋ฉด ํ์ด๊ฐ ๋์ต๋๋ค.
์ ๊ทธ๋ฆผ์ ์ ์ด๋จ๋ฏ์ด
๋ฆฌ์คํธ[i][j]์ ์ต๋ ์ฌํ ๊ฐฏ์๋ i,j์ ์๊น์ง ๋๋ฌํ๋๋ฐ ์ฃผ์์จ ์ฌํ์ ์ต๋ ๊ฐฏ์(dp[i][j-1])์ i,j์ ์๊น์ง ๋๋ฌํ๋๋ฐ ์ฃผ์์จ ์ฌํ์ ์ต๋ ๊ฐฏ์(dp[i-1][j])๋ฅผ ๋์กฐํด ๋ ํฐ๊ฐ + ๋ฆฌ์คํธ[i][j]์ ์ฌํ๊ฐฏ์
๋ฅผ ๊ณ์ฐํ๊ฒ ๋๋ฉด ํด๋น ์ ํ์์ด ๋์ถ๋๊ฒ ๋ฉ๋๋ค.
N,M = map(int,input().split())
lst = []
for _ in range(N):
lst.append(list(map(int,input().split())))
๋จผ์ ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋ฏธ๋ก๋ฅผ ๋ฐ์์ค์๋ค.
dp = [[0]*M for _ in range(N)]
dp[0][0] = lst[0][0]
dp๋ฆฌ์คํธ๋ฅผ ๋ฏธ๋ก ํฌ๊ธฐ์ ๋๊ฐ์ด ์์ฑํ๊ณ dp[0][0]์ ์ ํ์์ ์ํด lst[0][0]๊ณผ ๋๊ฐ์ด ์ค์ ํด์ค๋๋ค.
for i in range(N):
for j in range(M):
dp[i][j] = max(dp[i][j-1],dp[i-1][j]) + lst[i][j]
์ด์ ๋ถ์๋จ๊ณ์์ ๋์ถํ ์ ํ์์ ์ ์ฉํ๋ฉด ๋ฉ๋๋ค.
if N == 1:
print(sum(lst[0]))
else:
print(dp[N-1][M-1])
๋ง์ง๋ง ์ถ๋ ฅ๋ถ๋ถ์์ ํ๊ฐ์ง ์ฃผ์ํ ์ ์ N์ด 1์ธ ๊ฒฝ์ฐ์
๋๋ค.
N์ด 1์ด๋ฉด ์ธ๋ก๊ธธ์ด๊ฐ 1์ด ๋์ด ์ ํ์์ ์ฐธ๊ณ ํ์ฌ ๋์ถํ๋ฉด ์ด์ํ ๊ฐ์ด ๋์ถ๋ฉ๋๋ค.
์ธ๋ก๊ธธ์ด๊ฐ 1์ด๋ผ๋ฉด ์ด์ฐจํผ ๋ฏธ๋ก์ ์ ์ฒด ํฉ์ด ์ฌํ์ ์ต๋ ๊ฐฏ์๊ฐ ๋๋ฏ๋ก ๋ฏธ๋ก์ ํฉ์ฐ์ ์ถ๋ ฅํ๊ณ
์๋๋ผ๋ฉด ๋์ฐฉ์ง์ ์ dp๊ฐ์ ๋์ถํ๋ฉด ๋ฉ๋๋ค.