์๋ ํ์ธ์! ์ค๋์ ๋ฐฑ์ค ์จ๋ผ์ธ ์ ์ง์ ๋ฌธ์ ๋ฒํธ 11660๋ฒ์ ํ์ด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง 2์ฐจ์ ๋ฐฐ์ด์์ ์ฌ๋ฌ ์ฟผ๋ฆฌ์ ๋ํ ๋ถ๋ถํฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค. ์ขํ (x1, y1)๋ถํฐ (x2, y2)๊น์ง์ ํฉ์ ๋น ๋ฅด๊ฒ ๊ณ์ฐํ ์ ์๋๋ก ๋์ ํฉ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค.
1. ๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง 2์ฐจ์ ๋ฐฐ์ด์์ ์ฌ๋ฌ ์ฟผ๋ฆฌ์ ๋ํ ๋ถ๋ถํฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค. ์ขํ (x1, y1)๋ถํฐ (x2, y2)๊น์ง์ ํฉ์ ๋น ๋ฅด๊ฒ ๊ณ์ฐํ ์ ์๋๋ก ๋์ ํฉ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
2. ์ ๊ทผ๋ฒ
1. ์ ๋ ฅ๋ฐ๊ธฐ: ๋ฐฐ์ด์ ํฌ๊ธฐ(N)์ ์ฟผ๋ฆฌ์ ๊ฐ์(M)๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
2. ๊ทธ๋ํ ์ ๋ ฅ๋ฐ๊ธฐ: N x N ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
3. ๋์ ํฉ ๋ฐฐ์ด ์ด๊ธฐํ: ๋์ ํฉ ๋ฐฐ์ด(prefix sum ๋ฐฐ์ด)์ ์ด๊ธฐํํฉ๋๋ค.
4. ๋์ ํฉ ๊ณ์ฐ: ์ฃผ์ด์ง ๋ฐฐ์ด์ ๋์ ํฉ์ ๊ณ์ฐํฉ๋๋ค.
5. ๋ถ๋ถํฉ ๊ณ์ฐ: ๊ฐ ์ฟผ๋ฆฌ์ ๋ํด ๋์ ํฉ์ ์ด์ฉํ์ฌ ๋ถ๋ถํฉ์ ๋น ๋ฅด๊ฒ ๊ณ์ฐํฉ๋๋ค.
6. ์ ๋ต ์ถ๋ ฅ: ๊ฐ ์ฟผ๋ฆฌ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
3. ์ ๋ต ์ฝ๋
import sys
input = sys.stdin.readline
# ์
๋ ฅ๋ฐ๊ธฐ
N, M = map(int, input().split())
# ๊ทธ๋ํ ์ ์ฅ์ ์ํ ๋ฆฌ์คํธ ์ด๊ธฐํ
graph = []
# ๊ทธ๋ํ ์
๋ ฅ๋ฐ๊ธฐ
for _ in range(N):
graph.append(list(map(int, input().split())))
# ๋์ ํฉ ๋ฐฐ์ด ์ด๊ธฐํ (prefix sum ๋ฐฐ์ด)
prefix = [[0] * (N+1) for _ in range(N+1)]
# ๋์ ํฉ ๊ณ์ฐ
for x in range(N):
for y in range(N):
prefix[x+1][y+1] = prefix[x+1][y] + prefix[x][y+1] + graph[x][y] - prefix[x][y]
# ์ ๋ต์ถ๋ ฅ ๋ณ์ ์ด๊ธฐํ
ans = [0] * M
# ์ฃผ์ด์ง ์ขํ์ ๋์ ํฉ ๊ณ์ฐ
for i in range(M):
x1, y1, x2, y2 = map(int, input().split())
# (x1, y1)๋ถํฐ (x2, y2)๊น์ง์ ๋ถ๋ถํฉ ๊ณ์ฐ
ans[i] = prefix[x2][y2] - prefix[x1-1][y2] - prefix[x2][y1-1] + prefix[x1-1][y1-1]
# ์ ๋ต ์ถ๋ ฅ
for i in range(M):
print(ans[i])
4. ์ฝ๋ ์ค๋ช
1. ์ ๋ ฅ๋ฐ๊ธฐ
• N๊ณผ M์ ์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด์ ํฌ๊ธฐ์ ์ฟผ๋ฆฌ์ ๊ฐ์๋ฅผ ์ค์ ํฉ๋๋ค.
2. ๊ทธ๋ํ ์ ๋ ฅ๋ฐ๊ธฐ
• N x N ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ์ graph ๋ฆฌ์คํธ์ ์ ์ฅํฉ๋๋ค.
3. ๋์ ํฉ ๋ฐฐ์ด ์ด๊ธฐํ
• prefix ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ํฉ ๋ฐฐ์ด์ ์ด๊ธฐํํฉ๋๋ค. ์ด ๋ฐฐ์ด์ (N+1) x (N+1) ํฌ๊ธฐ๋ก ์ค์ ํ์ฌ ์ธ๋ฑ์ค ๊ณ์ฐ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
4. ๋์ ํฉ ๊ณ์ฐ
• 2์ฐจ์ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ๋์ ํฉ์ ๊ณ์ฐํ์ฌ prefix ๋ฐฐ์ด์ ์ ์ฅํฉ๋๋ค.
5. ๋ถ๋ถํฉ ๊ณ์ฐ
• ๊ฐ ์ฟผ๋ฆฌ์ ๋ํด ๋์ ํฉ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ๋น ๋ฅด๊ฒ ๋ถ๋ถํฉ์ ๊ณ์ฐํฉ๋๋ค. ์ด๋ (x1, y1)๋ถํฐ (x2, y2)๊น์ง์ ํฉ์ ๊ตฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
6. ์ ๋ต ์ถ๋ ฅ
• ๊ฐ ์ฟผ๋ฆฌ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ans ๋ฆฌ์คํธ์ ์ ์ฅํ๊ณ , ์ต์ข ์ ์ผ๋ก ์ถ๋ ฅํฉ๋๋ค.
5. Github์ผ๋ก ํ์ธ
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ(๋ฐฑ์ค)_Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ(๋ฐฑ์ค) 15649[N๊ณผ M (1)], 15650[N๊ณผ M (2)] (0) | 2024.06.20 |
---|---|
BOJ(๋ฐฑ์ค) 3020[๊ฐ๋ฅ๋ฒ๋ ] (0) | 2024.06.19 |
BOJ(๋ฐฑ์ค) 2304[์ฐฝ๊ณ ๋ค๊ฐํ] (0) | 2024.06.17 |
BOJ(๋ฐฑ์ค) 1912[์ฐ์ํฉ] (0) | 2024.06.17 |
BOJ(๋ฐฑ์ค) 2559[์์ด] (0) | 2024.06.17 |