coding_test
[๋ฐฑ์ค] 11660. ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (ํ์ด์ฌ)
aeightchill
2025. 4. 14. 21:05
728x90
๐๏ธ ๋ฌธ์
๐ Point
Prefix Sum
2์ฐจ์ ๋ฐฐ์ด board์ ๋์ ํฉ์ ์ ์ฅํ ์๋ก์ด ๋ฐฐ์ด prefix_sum์ ๋ง๋ค์ด์ ์ง์ฌ๊ฐํ ๊ตฌ๊ฐ์ ํฉ์ O(1)์ ๊ตฌํ ์ ์๋๋ก ํ๋ค.
๐ ์ฝ๋
def solution():
N, M = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]
prefix_sum = [[0] * (N+1) for _ in range(N+1)]
for i in range(1, N+1):
for j in range(1, N+1):
prefix_sum[i][j] = (
board[i-1][j-1] + prefix_sum[i-1][j] + prefix_sum[i][j-1] - prefix_sum[i-1][j-1]
)
for _ in range(M):
x1, y1, x2, y2 = map(int, input().split())
result = (
prefix_sum[x2][y2] - prefix_sum[x1-1][y2] - prefix_sum[x2][y1-1] + prefix_sum[x1-1][y1-1]
)
print(result)
solution()
โ๐ป ํ์ด
์๊ฐ ๋ณต์ก๋ : O(N^2 + M)
- ๋์ ํฉ ๋ฐฐ์ด ์ด๊ธฐํ
- 1-based index ์ฌ์ฉ์ ์ํด prefix_sum์ (N+1) X (N+1)์ ํฌ๊ธฐ๋ก ์ค์ ํ๋ค.
- ์ธ๋ฑ์ค ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ค์ธ๋ค.
- ๋์ ํฉ ๊ณ์ฐ
- prefix_sum[i][j] : (1, 1) ๋ถํฐ (i, j) ๊น์ง์ ๋ถ๋ถํฉ
- ์ ํ์
- board[i-1][j-1] (* ํ์ฌ ๊ฐ) + ์์ชฝ ๋์ ํฉ + ์ผ์ชฝ ๋์ ํฉ - ๊ฒน์น๋ ๋ถ๋ถ(์ผ์ชฝ ์)์ ๋ค์ ๋ํ ๊ฒ
- (x1, y1)๋ถํฐ (x2, y2)๊น์ง ํฉ
- x1, y1, x2, y2 : ๊ตฌ๊ฐ์ ์ข์๋จ (x1, y1), ์ฐํ๋จ (x2, y2)
- ์ฌ๊ฐํ ๊ตฌ๊ฐ์ ํฉ์ ๋์ ํฉ ๋ฐฐ์ด์ ์ด์ฉํด O(1)๋ก ๊ณ์ฐ
- ๊ฒน์น๋ ๋ถ๋ถ์ ๋ ๋ฒ ๋นผ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ ๋ํด์ค๋ค.
728x90