PS

[λ°±μ€€] 11048 μ΄λ™ν•˜κΈ° with Python

ν˜•μ€€_It's 2022. 2. 19. 17:59
728x90
λ°˜μ‘ν˜•

πŸ“Œ BOJ 11048 μ΄λ™ν•˜κΈ°

πŸ’‘ 쑰건

  1. NΓ—M 크기의 미둜 (1 ≀ N, M ≀ 1,000)

  2. (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)둜 이동가λŠ₯.

  3. μ€€κ·œκ°€ (N, M)으둜 이동할 λ•Œ, κ°€μ Έμ˜¬ 수 μžˆλŠ” 사탕 개수의 μ΅œλŒ“κ°’μ„ κ΅¬ν•˜λŠ” 문제

  4. N개 μ€„μ—λŠ” 총 M개의 μˆ«μžκ°€ μ£Όμ–΄μ§€λ©°, r번째 μ€„μ˜ c번째 μˆ˜λŠ” (r, c)에 놓여져 μžˆλŠ” μ‚¬νƒ•μ˜ κ°œμˆ˜μ΄λ‹€.

  5. μ‚¬νƒ•μ˜ κ°œμˆ˜λŠ” 0보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100보닀 μž‘κ±°λ‚˜ κ°™λ‹€.

  6. λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ° μœ ν˜•μ˜ 문제

πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

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

⌨️ 문제 풀이

  1. λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° μœ ν˜•μ˜ λ¬Έμ œμž…λ‹ˆλ‹€. μ€€κ·œκ°€ μ΄λ™ν•˜λ©΄μ„œ 사탕을 λͺ¨λ‘ κ°€μ Έκ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

  2. arr λ¦¬μŠ€νŠΈμ— 각 사탕이 놓여져 μžˆλŠ” 숫자λ₯Ό μž…λ ₯λ°›μŠ΅λ‹ˆλ‹€.

  3. candy λ¦¬μŠ€νŠΈλŠ” μ€€κ·œκ°€ μ±™κΈ΄ 숫자의 μ΅œλŒ“κ°’μ„ μ €μž₯ν•  리슀트 μž…λ‹ˆλ‹€.

  4. candy[0][0] 은 arr[0][0] 이 λ˜κ² μŠ΅λ‹ˆλ‹€.
    μ™œλƒν•˜λ©΄ μ€€κ·œλŠ” (1, 1)에 μœ„μΉ˜ν•˜κ³  있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

  5. 1λΆ€ν„° 각각 n, m 만큼 이쀑 반볡문으둜 μˆœνšŒν•΄μ€λ‹ˆλ‹€.
    candy[i][j] 의 숫자λ₯Ό μ΅œλŒ“κ°’μœΌλ‘œ κ°±μ‹ ν•©λ‹ˆλ‹€.

  6. μ€€κ·œκ°€ 움직일 수 μžˆλŠ” λ°©ν–₯은 (0, 1), (1, 0), (1, 1) 이며
    이동 λ°©ν–₯에 λ”°λΌμ„œ μ΅œλŒ“κ°’μ„ μ„ νƒν•΄μ„œ candyλ₯Ό κ°±μ‹ ν•˜κ³  (n - 1, m - 1) μΈλ±μŠ€μ— μžˆλŠ” 값을 좜λ ₯ν•©λ‹ˆλ‹€.

πŸ’Ύ λŠλ‚€μ 

  1. 싀버 μˆ˜μ€€μ˜ λ‹€μ΄λ‚˜λ―Ήν”„λ‘œκ·Έλž˜λ° μœ ν˜•μ˜ λ¬Έμ œμ˜€λŠ”λ°, 이 μœ ν˜•μ„ ν’€μ–΄λ³Έ 적이 μžˆλ‹€λ©΄ ν’€ 수 μžˆλŠ” λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.
  2. 그리디 λ¬Έμ œλ„ 이런 λ¬Έμ œκ°€ λΉ„μŠ·ν•˜κ²Œ μžˆλŠ”λ°, μž…λ ₯받은 Nκ³Ό M의 값을 보고 μŽ„ν•œ λŠλ‚Œμ„ 느끼고 그리디가 아닐 κ²ƒμ΄λΌλŠ” 생각을 ν–ˆμŠ΅λ‹ˆλ‹€.
  3. 점화식을 μ§œλŠ”κ²Œ 아직 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
λ°˜μ‘ν˜•