๐ฉ๐ป๐พ
[๋ฐฑ์ค/Python] 11660๋ฒ ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 2 ๋ณธ๋ฌธ
[๋ฐฑ์ค/Python] 11660๋ฒ ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 2
์ฅฌ์ค์ด 2023. 1. 28. 16:371๏ธโฃ๋ฌธ์ ์ค๋ช
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 ]
'์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/Python] 10986๋ฒ ๋๋จธ์ง (0) | 2023.01.29 |
---|---|
[๋ฐฑ์ค/Python] 1940๋ฒ ์ฃผ๋ชฝ (0) | 2023.01.29 |
[๋ฐฑ์ค/Python] 11659๋ฒ ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ (0) | 2023.01.24 |
[๋ฐฑ์ค/Python] 1546๋ฒ ํ๊ท (0) | 2023.01.24 |
[๋ฐฑ์ค/Python] 11720๋ฒ ์ซ์์ ํฉ ๊ตฌํ๊ธฐ (0) | 2023.01.24 |