ꡬ간 ν•© κ΅¬ν•˜κΈ°

0. ꡬ간 ν•©?

ꡬ간 합은 μœ„μ™€ 같이 전체 λ²”μœ„μ—μ„œ 각 λΆ€λΆ„ λ²”μœ„λ₯Ό λΉΌμ„œ ꡬ할 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ μ€‘λ³΅λ˜λŠ” μ˜μ—­μ΄ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— 이 μ˜μ—­μ€ λ‚˜μ€‘μ— 더해주어야 ν•œλ‹€.

이λ₯Ό λ„μ‹ν™”ν•˜λ©΄,

κ³Ό 같이 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

κ°„λ‹¨ν•˜κ²Œ μ‹œκ°„λ³΅μž‘λ„λ₯Ό ꡬ해보면 λŒ€λž΅ 인 것을 μ•Œ 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ 이런 λ°©λ²•μœΌλ‘œ ꡬ간 합을 κ΅¬ν•˜λŠ” 것은 맀우 λΉ„νš¨μœ¨μ μ΄λ‹€.

λ§Œμ•½ ꡬ간이 μ—¬λŸ¬ κ°œκ°€ μ£Όμ–΄μ§€λŠ” 상황일 λ•Œ, μ‹œκ°„ λ³΅μž‘λ„λŠ” 이 되게 λœλ‹€.

κ·Έλ ‡λ‹€λ©΄, μ–΄λ–»κ²Œ μ΅œμ ν™”ν•  수 μžˆμ„κΉŒ?

1. λˆ„μ  ν•© 계산

각 μœ„μΉ˜μ— λ”°λ₯Έ λˆ„μ ν•© ν‘œλ₯Ό 미리 ꡬ해놓을 수 μžˆλ‹€λ©΄, 이 ν‘œμ— 의 λ³΅μž‘λ„λ‘œ μ ‘κ·Όν•˜μ—¬ μ‹œκ°„λ³΅μž‘λ„λ₯Ό ν™•μ—°ν•˜κ²Œ 쀄일 수 μžˆμ„ 것 κ°™λ‹€.

κ·Έλ ‡λ‹€λ©΄, νŠΉμ • μœ„μΉ˜μ˜ λˆ„μ  합을 κ΅¬ν•˜λŠ” 방법은 μ–΄λ–»κ²Œ μΌλ°˜ν™”ν•  수 μžˆμ„κΉŒ?

μœ„μ™€ 같이, νŠΉμ • μœ„μΉ˜μ˜ λˆ„μ  합을 κ΅¬ν•˜λŠ” 과정은 λ‹€μŒκ³Ό κ°™λ‹€.

μš°μ„ , νŠΉμ • μœ„μΉ˜μ˜ μ™Όμͺ½κ³Ό μœ„μͺ½μ˜ λˆ„μ  합을 λ”ν•œλ‹€. μ΄λ ‡κ²Œ 되면 μ€‘λ³΅λ˜λŠ” μ˜μ—­μ΄ λ°œμƒν•˜κ²Œ λ˜λ―€λ‘œ, 이 쀑볡 λˆ„μ  합을 λΉΌμ€˜μ•Ό ν•œλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ, νŠΉμ • μœ„μΉ˜ 값을 더해주면 νŠΉμ • μœ„μΉ˜μ˜ λˆ„μ  합을 ꡬ할 수 μžˆλ‹€.

검산도 μ„±κ³΅μ μœΌλ‘œ 이루어진 것을 λ³Ό 수 μžˆλ‹€.

κ°„λ‹¨ν•œ 파이썬 μ½”λ“œλ‘œ λ‚˜νƒ€λ‚΄λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

for i in range(1, n + 1):  
    row = list(map(int, input().split()))  
    for j in range(1, n + 1):  
        s[i][j] = s[i][j-1] + s[i-1][j] - s[i-1][j-1] + row[j-1]

2. ꡬ간 ν•© 계산

μ΄λ ‡κ²Œ λˆ„μ  합에 λŒ€ν•œ ν‘œλ₯Ό κ΅¬ν–ˆλ‹€λ©΄, ꡬ간 합을 의 λ³΅μž‘λ„λ‘œ ꡬ할 수 μžˆλ‹€.

λ§Œμ•½ μ§ˆμ˜κ°€ 와 같이 μ£Όμ–΄μ§„λ‹€λ©΄, μ•„λž˜μ™€ 같이 μ²˜μŒμ— 봀던 ꡬ간 합을 κ΅¬ν•˜λŠ” 방식을 λˆ„μ  ν•© ν‘œμ— μ μš©ν•˜μ—¬ μ‰½κ²Œ ꡬ할 수 μžˆλ‹€.

μ΅œμ’…μ μœΌλ‘œ μ•„λž˜μ™€ 같은 μ‹μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 있게 λ˜μ—ˆλ‹€.

각 μ›μ†Œμ— μ ‘κ·Όν•˜λŠ” μ‹œκ°„ λ³΅μž‘λ„λŠ” μ΄λ―€λ‘œ, μ΅œμ’…μ˜ μ‹œκ°„λ³΅μž‘λ„ λŠ”

κ³Ό 같이 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.