[λ°±μ€] 11048 μ΄λνκΈ° with Python
π BOJ 11048 μ΄λνκΈ°
π‘ 쑰건
NΓM ν¬κΈ°μ λ―Έλ‘ (1 β€ N, M β€ 1,000)
(r, c)μ μμΌλ©΄, (r+1, c), (r, c+1), (r+1, c+1)λ‘ μ΄λκ°λ₯.
μ€κ·κ° (N, M)μΌλ‘ μ΄λν λ, κ°μ Έμ¬ μ μλ μ¬ν κ°μμ μ΅λκ°μ ꡬνλ λ¬Έμ
Nκ° μ€μλ μ΄ Mκ°μ μ«μκ° μ£Όμ΄μ§λ©°, rλ²μ§Έ μ€μ cλ²μ§Έ μλ (r, c)μ λμ¬μ Έ μλ μ¬νμ κ°μμ΄λ€.
μ¬νμ κ°μλ 0λ³΄λ€ ν¬κ±°λ κ°κ³ , 100λ³΄λ€ μκ±°λ κ°λ€.
λ€μ΄λλ―Ήνλ‘κ·Έλλ° μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from sys import stdin
n, m = map(int, stdin.readline().split())
arr = []
candy = [[0] * m for _ in range(n)]
res = 0
for _ in range(n):
arr.append(list(map(int, stdin.readline().split())))
candy[0][0] = arr[0][0]
for i in range(1, m):
candy[0][i] = arr[0][i] + candy[0][i - 1]
for i in range(1, n):
candy[i][0] = arr[i][0] + candy[i - 1][0]
for i in range(1, n):
for j in range(1, m):
candy[i][j] = max(candy[i - 1][j], candy[i][j - 1], candy[i - 1][j - 1]) + arr[i][j]
print(candy[n - 1][m - 1])
π μμ λ° μ€νκ²°κ³Ό
μμ
4 3
1 2 3
6 5 4
7 8 9
12 11 10
μ€νκ²°κ³Ό
47
β¨οΈ λ¬Έμ νμ΄
λ€μ΄λλ―Ή νλ‘κ·Έλλ° μ νμ λ¬Έμ μ λλ€. μ€κ·κ° μ΄λνλ©΄μ μ¬νμ λͺ¨λ κ°μ Έκ° μ μμ΅λλ€.
arr 리μ€νΈμ κ° μ¬νμ΄ λμ¬μ Έ μλ μ«μλ₯Ό μ λ ₯λ°μ΅λλ€.
candy 리μ€νΈλ μ€κ·κ° μ±κΈ΄ μ«μμ μ΅λκ°μ μ μ₯ν 리μ€νΈ μ λλ€.
candy[0][0] μ arr[0][0] μ΄ λκ² μ΅λλ€.
μλνλ©΄ μ€κ·λ (1, 1)μ μμΉνκ³ μκΈ° λλ¬Έμ λλ€.1λΆν° κ°κ° n, m λ§νΌ μ΄μ€ λ°λ³΅λ¬ΈμΌλ‘ μνν΄μ€λλ€.
candy[i][j] μ μ«μλ₯Ό μ΅λκ°μΌλ‘ κ°±μ ν©λλ€.μ€κ·κ° μμ§μΌ μ μλ λ°©ν₯μ (0, 1), (1, 0), (1, 1) μ΄λ©°
μ΄λ λ°©ν₯μ λ°λΌμ μ΅λκ°μ μ νν΄μ candyλ₯Ό κ°±μ νκ³ (n - 1, m - 1) μΈλ±μ€μ μλ κ°μ μΆλ ₯ν©λλ€.
πΎ λλμ
- μ€λ² μμ€μ λ€μ΄λλ―Ήνλ‘κ·Έλλ° μ νμ λ¬Έμ μλλ°, μ΄ μ νμ νμ΄λ³Έ μ μ΄ μλ€λ©΄ ν μ μλ λ¬Έμ μμ΅λλ€.
- 그리λ λ¬Έμ λ μ΄λ° λ¬Έμ κ° λΉμ·νκ² μλλ°, μ λ ₯λ°μ Nκ³Ό Mμ κ°μ λ³΄κ³ μν λλμ λλΌκ³ 그리λκ° μλ κ²μ΄λΌλ μκ°μ νμ΅λλ€.
- μ νμμ μ§λκ² μμ§ μ΄λ ΅μ΅λλ€.