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
'coding_test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1449. ์๋ฆฌ๊ณต ํญ์น (0) | 2025.05.05 |
---|---|
[๋ฐฑ์ค] 2805. ๋๋ฌด ์๋ฅด๊ธฐ (ํ์ด์ฌ) (0) | 2025.04.14 |
[๋ฐฑ์ค] 17270. ์ฐ์์ธ์ ํ๋ค์ด (ํ์ด์ฌ) (0) | 2025.03.27 |
[๋ฐฑ์ค] 17609. ํ๋ฌธ (ํ์ด์ฌ) (0) | 2025.03.25 |
[๋ฐฑ์ค] 11945. ๋จ๊ฑฐ์ด ๋ถ์ด๋นต (ํ์ด์ฌ) (0) | 2025.03.08 |