๐Ÿ‘ฉ๐Ÿป‍๐ŸŒพ

[๋ฐฑ์ค€/Python] 11660๋ฒˆ ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 2 ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€/Python] 11660๋ฒˆ ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 2

์ฅฌ์Šค์ด 2023. 1. 28. 16:37
728x90

1๏ธโƒฃ๋ฌธ์ œ ์„ค๋ช…

N×N๊ฐœ์˜ ์ˆ˜๊ฐ€ N×N ํฌ๊ธฐ์˜ ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋‹ค. (x1, y1)๋ถ€ํ„ฐ (x2, y2)๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. (x, y)๋Š” xํ–‰ y์—ด์„ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, N = 4์ด๊ณ , ํ‘œ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฑ„์›Œ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7

์—ฌ๊ธฐ์„œ (2, 2)๋ถ€ํ„ฐ (3, 4)๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋ฉด 3+4+5+4+5+6 = 27์ด๊ณ , (4, 4)๋ถ€ํ„ฐ (4, 4)๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•˜๋ฉด 7์ด๋‹ค.

ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜์™€ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ์—ฐ์‚ฐ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

2๏ธโƒฃ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ‘œ์˜ ํฌ๊ธฐ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜๊ฐ€ 1ํ–‰๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๋„ค ๊ฐœ์˜ ์ •์ˆ˜ x1, y1, x2, y2 ๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, (x1, y1)๋ถ€ํ„ฐ (x2, y2)์˜ ํ•ฉ์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜๋Š” 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. (x1 ≤ x2, y1 ≤ y2)

3๏ธโƒฃ์ถœ๋ ฅ

์ด M์ค„์— ๊ฑธ์ณ (x1, y1)๋ถ€ํ„ฐ (x2, y2)๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•ด ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป์ž‘์„ฑํ•œ ์ฝ”๋“œ

import sys

input = sys.stdin.readline

sizeN, sumN = map(int, input().split())	# ๋ฐฐ์—ด์˜ ํฌ๊ธฐ, ํ•ฉ์„ ๊ตฌํ•  ํšŸ์ˆ˜
data = [list(map(int, input().split())) for _ in range(sizeN)]	# ๋ฐฐ์—ด๊ฐ’
sumData = [[0]*(sizeN+1) for _ in range(sizeN+1)]	# ๋ˆ„์ ํ•ฉ

for i in range(1, sizeN+1):
    for j in range(1, sizeN+1):
        sumData[i][j] = sumData[i][j-1] + sumData[i-1][j] - sumData[i-1][j-1] + data[i-1][j-1]

for _ in range(sumN):
    x1, y1, x2, y2 = map(int, input().split())
    print(sumData[x2][y2] - sumData[x1-1][y2] - sumData[x2][y1-1] + sumData[x1-1][y1-1])

๐Ÿ’ก์ฝ”๋“œ ์„ค๋ช…

sumData๋Š” ๊ณ„์‚ฐํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ํ–‰๊ณผ ์—ด์— +1์”ฉ ํ•ด์ฃผ์—ˆ๋‹ค. (๊ณ„์‚ฐํ•  ๋•Œ, 1ํ–‰๊ณผ 1์—ด์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค)

 

์ฒซ๋ฒˆ์งธ ์ค‘์ฒฉ๋œ for๋ฌธ์„ ๋ณด๋ฉด, sumData[ i ][ j ]์˜ ๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด sumData[ i ][ j - 1 ]์˜ ๊ฐ’๊ณผ sumData[ i - 1 ][ j ]์˜ ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, sumData[ i ][ j - 1 ]๊ณผ sumData[ i - 1 ][ j ]์ด ๊ฒน์น˜๋Š” ๊ตฌ๊ฐ„์ธ sumData[ i -1 ] [ j - 1 ]์˜ ๊ฐ’์€ ํ•œ๋ฒˆ ๋นผ์ค€๋‹ค. ๋นผ์ค€ ๊ฐ’์— data[ i - 1][ j - 1 ]์˜ ๊ฐ’์„ ๋”ํ•ด์ฃผ๋ฉด ( i , j )๊นŒ์ง€์˜ ๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

sumData[ i ][ j ] = sumData[ i ][ j - 1 ] + sumData[ i - 1 ][ j ] - sumData[ i - 1 ][ j - 1 ] + data[ i - 1 ][ j - 1 ] 

 

๋‘๋ฒˆ์งธ for๋ฌธ์„ ๋ณด๋ฉด, ๋‘๊ฐœ์˜ ์ขŒํ‘œ๊ฐ’์„ ์ž…๋ ฅ ๋ฐ›๊ณ , (x1 , y1)๋ถ€ํ„ฐ (x2 , y2)๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ sumData[ x2 ][ y2 ]์˜ ๊ฐ’์—์„œ sumData[ x1 - 1 ]์˜ ๊ฐ’๊ณผ sumData[ x2 ][ y1 - 1 ]์˜ ๊ฐ’์„ ๋นผ์ค€๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, ๊ฒน์นœ ๋ถ€๋ถ„์˜ ๊ฐ’์ธ sumData[ x1 -1 ][ y1 - 1 ]๋Š” ๊ฐ’์€ ํ•œ๋ฒˆ ๋”ํ•ด์ค€๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐํ•˜๋ฉด ์›ํ•˜๋Š” ๋ฐฐ์—ด ๋ถ€๋ถ„์˜ ๋ˆ„์ ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

sumData[ x2 ][ y2 ] - sumData[ x1 - 1 ] - sumData[ x2 ][ y1 - 1 ] + sumData[ x1 -1 ][ y1 - 1 ]

728x90
Comments