๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/11660)
<๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5>
๋ฌธ์
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์ด๋ค.
ํ์ ์ฑ์์ ธ ์๋ ์์ ํฉ์ ๊ตฌํ๋ ์ฐ์ฐ์ด ์ฃผ์ด์ก์ ๋, ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ์ ํฌ๊ธฐ 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)
์ถ๋ ฅ
์ด M ์ค์ ๊ฑธ์ณ (x1, y1)๋ถํฐ (x2, y2)๊น์ง ํฉ์ ๊ตฌํด ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution
import sys
if __name__=='__main__' :
N,M=map(int,sys.stdin.readline().split())
arr=[]
for i in range(N): # ํ ์
๋ ฅ
arr.append(list(map(int,sys.stdin.readline().split())))
dp=[]
for i in range(N): # ๊ตฌ๊ฐ ํฉ
temp=[]
for j in range(N):
if i==0:
if j==0:
temp.append(arr[0][0])
else:
temp.append(temp[-1]+arr[i][j])
else:
if j==0:
temp.append(dp[i-1][j]+arr[i][j])
else:
temp.append(dp[i-1][j]+temp[-1]-dp[i-1][j-1]+arr[i][j])
dp.append(temp)
for i in range(M):
section=list(map(int,sys.stdin.readline().split())) # [x1,y1,x2,y2]
if section[0]-1!=0 or section[1]-1!=0:
if section[0]-1!=0 and section[1]-1!=0:
result=dp[section[2]-1][section[3]-1]-dp[section[2]-1][section[1]-2]-dp[section[0]-2][section[3]-1]+dp[section[0]-2][section[1]-2]
elif section[0]-1==0:
result = dp[section[2]-1][section[3]-1]-dp[section[2]-1][section[1]-2]
elif section[1]-1==0:
result=dp[section[2]-1][section[3]-1]-dp[section[0]-2][section[3]-1]
else: #(1,1)๋ถํฐ(x2,y2)
result = dp[section[2] - 1][section[3] - 1]
print(result)
ํ๋ฅผ ์ ๋ ฅ๋ฐ์ ํ ๊ตฌ๊ฐ ํฉ์ ๊ณ์ฐํด์ค๋ค.
x1, y1, x2, y2๋ฅผ ์ ๋ ฅ๋ฐ์ ํ ์กฐ๊ฑด๋ณ๋ก ๊ตฌ๊ฐ ํฉ ๊ณ์ฐ ์์ ๊ตฌํํด์ฃผ์๋ค.
1) x1๊ณผ y1์ด 1์ด ์๋ ๊ฒฝ์ฐ
1-1) (1,1)๋ถํฐ ๊ตฌํ๋ ๊ฒ์ด ์๋ ๊ฒฝ์ฐ
1-2) (1, y1) ~ (x2, y2)
1-3) (x1,1) ~ (x2, y2)
2) (1,1) ~ (x2, y2)
์์ ๊ฒฝ์ฐ๋ก ๋๋์ด ๊ตฌ๊ฐ ํฉ์ ๊ตฌํ๋ค.
โป ์ค๋ช ๋ถ์กฑํ ๊ฒ์ ๋ค์์ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ๊ฒ ๋ค
์๊ฐ๐ค
๋ช ๋ฌ ์ ์ ์คํจํ์ฌ ๋ค์ ์๋ํ ๋ฌธ์ ์๋ค. ๊ตฌ๊ฐ ํฉ์ ๊ตฌํ ํ (x1, y1)~(x2, y2) ์ฌ์ด์ ๊ตฌํ ํฉ์ ๊ตฌํ๋ ์กฐ๊ฑด์์
๊ตฌํํ๋ ๋ถ๋ถ์์ ์๋ชป๋์๋ ๊ฒ์ ์ ์ ์์๋ค. ์กฐ๊ธ ๋ณต์กํ๊ฒ ๊ตฌํํ ๊ฒ ๊ฐ์ ๋๋์ด ์์ง๋ง... ใ _ใ ํต๊ณผ!
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 11726_2รn ํ์ผ๋ง (0) | 2022.03.01 |
---|---|
[Baekjoon] 15988_1, 2, 3 ๋ํ๊ธฐ 3 (0) | 2022.02.28 |
[Baekjoon] 11051_์ดํญ ๊ณ์ 2 (0) | 2022.02.21 |
[Baekjoon] 4358_์ํํ (0) | 2022.02.16 |
[Baekjoon] 18352_ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2022.02.04 |