๋ฌธ์ : https://www.acmicpc.net/problem/11660
11660๋ฒ: ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5
์ฒซ์งธ ์ค์ ํ์ ํฌ๊ธฐ N๊ณผ ํฉ์ ๊ตฌํด์ผ ํ๋ ํ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ํ์ ์ฑ์์ ธ ์๋ ์๊ฐ 1ํ๋ถํฐ ์ฐจ๋ก๋๋ก ์ฃผ์ด์ง๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ๋ค
www.acmicpc.net
์ด ๋ฌธ์ ๋ฅผ ๋ณด๊ธฐ ์ ๊น์ง๋ ๊ตฌ๊ฐํฉ๋ ํ ๋งํ๋ค๊ณ ์๊ฐํ๋ค๊ฐ ๋ฑ ์ด ๋ฌธ์ ๋ฅผ ๋ณด๋ ์๊ฐ,
์.. ๋ด๊ฐ ์ด๊ฑธ ํ ์ ์์๊น ์ด ์๊ฐ์ด ๋ค์๋ค. ๋ํํ
๋ ์ด ๋ฌธ์ ๊ฐ ๊ฑฐ์ ์ต์ข
๋ณด์ค์ฒ๋ผ ๋๊ปด์ก๋ค.
์๋ํ๋ฉด ํ์๋ 2์ฐจ์ ๋ฐฐ์ด์ ์ธ๋ ์ฆ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ ์ง์ฅ์์๋ ๋ฐฐ์ด์ ๋ค๋ฃจ๋ ๊ฒ ๋ฅ์์ง ์์ ๋ณด์ธ๋ค๋ ๋ง์ ์ฌ๋ฌ ๋ฒ ๋ค์์ ์ ๋๋ก ์ด๋ณด์ค์ ์ด๋ณด์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ถ์ํด์ ํผ๋ค? ์ ๋ง ๊ฐ๋ฅ์ฑ์ด ๋จ 1๋ ์์ด ๋ณด์๋ค.
ํ์ง๋ง ์ด ์ญ์ ๋ถ์ํ์ง ์๊ณ ๋์ด๊ฐ๊ฒ ๋๋ฉด ๊ฒฐ๊ตญ์ ๋ค๋ฅธ ์ง์ฅ์ ๊ฐ์๋ ๋๊ฐ์ ์๋ฆฌ๋ฅผ ๋ฃ๊ฒ ๋ ๊ฒ ๋ปํ๊ณ ,
๊ฒฐ๊ตญ ๊ณต๋ถ๋ค์ด ๊ณต๋ถ๋ฅผ ๋ชปํ ๊ฒ์ด ๋์ด๋ฒ๋ฆฐ๋ค. ๊ทธ๋์ ์ด ๋ฌธ์ ๋ ํ๋ํ๋ ๋ถ์์ ํด๋๊ฐ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก๋ ๋ถ์์ ํด๋๊ณ , 2์ฐจ์ ๋ฐฐ์ด์ ๊ฑฐ๋ถ๊ฐ๋ ์กฐ๊ธ์ ๋๊ฒ ๋์๋ค.
์๋ก ์ด ์ข ๊ธธ์๋๋ฐ, ๋จผ์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ํด์ ์์๋ณด์.
2์ฐจ์ ๋ฐฐ์ด์ด๋, ๋ง ๊ทธ๋๋ก 1์ฐจ์ ๋ฐฐ์ด์ด ์ฌ๋ฌ ๊ฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ด, ๋ฉด ํํ๋ฅผ ๋ ๊ณ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
๋ฐ๋ผ์ ์ด 2์ฐจ์ ๋ฐฐ์ด์ ๋ค๋ฃจ๊ธฐ ์ํด์ 2์ค ๋ฐ๋ณต๋ฌธ์ด ๊ฑฐ์ ํ์์ ์ผ๋ก ๋์จ๋ค.
์ฑ
์์๋ ๊ตฌ๊ฐํฉ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ์ค์ผ๋ก ์๋ ค์ฃผ๊ธฐ ๋๋ฌธ์,
๊ตฌ๊ฐํฉ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ ๋ฌธ์ ํ์ด ๋ฐฉ์์ ๋ถ์ํ ๊ฒ์ด๋ค.
ํ์๊ฐ ๊ตฌ๊ธ๋ง์ผ๋ก ์์๋ณธ ๊ฒฐ๊ณผ, ์ด ๋ฌธ์ ์์๋ DP(Dynamic Programing)๋ณด๋ค ๊ตฌ๊ฐํฉ ์๊ณ ๋ฆฌ์ฆ์ด ์๋๊ฐ ๋น ๋ฅด๋ค๊ณ ํ์ฌ ๊ตฌ๊ฐํฉ์ ์ง์คํ ์ ์์๋ค. DP์ ๋ํด์๋ ์์ง ๊ณต๋ถ๋ฅผ ๋ชปํ๊ธฐ ๋๋ฌธ์, ์ฐจํ์ ๊ธ์ ์์ฑํด๋ณผ ์๊ฐ์ด๋ค.
์๊ฐํ๊ธฐ ์ฝ๊ฒ ์์ ๋ฅผ ํตํด ์๊ฐ์ ํด๋ณด์.
์ฒ์์ 4๋ฅผ ์
๋ ฅํด์ 4์นธx4์นธ = 16์นธ์ 2์ฐจ์ ๋ฐฐ์ด์ด ๋ง๋ค์ด์ก๋ค.
๊ทธ๋ฌ๋ฉด์ ๊ฐ์ ์์๋๋ก ๋ฃ๊ธฐ ์์ํ๋ค. ๊ทธ๋ผ ์ด๋ ๊ฒ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง๋ค.
์ฐ๋ฆฐ ์ฌ๊ธฐ์ ๊ตฌ๊ฐํฉ์ ๊ตฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ๋์ ํฉ์ ๊ตฌํด์ผ ํ๋ค.
๊ทผ๋ฐ ์ด๋ป๊ฒ ๊ตฌํด์ผ ์, ์๋๋ก ๋ํด์ง๋ ๊ฒ๋ ๋๋น๋ฅผ ํ ์ ์์๊น?
์ฑ
์์ ๋์จ ๊ณต์์ด ์์ง๋ง, ์ญ์๋ ํ์๋ ํ ๋ฒ์ ์ดํด๋ฅผ ํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ํ๋์ฉ ๋ถ์์ ํด๋ดค๋ค.
๋์ ํฉ์ ๋ฐฐ์ด๋ ์ญ์๋ 2์ฐจ์ ๋ฐฐ์ด์ผ ์๋ฐ์ ์๋ค. ์๋ํ๋ฉด ์ซ์๋ฅผ ์
๋ ฅ๋ฐ์ ๋ฐฐ์ด ์์ฒด๊ฐ 2์ฐจ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋จ ์ผ์ฐจ์ ๋์ ํฉ์ ๊ฐ๋จํ๋ค. S[i] = S[i-1] + N[i]. ๊ทผ๋ฐ, ์ด ๋ฌธ์ ๋ ์ข ๋ ๋ณต์กํ๋ค.
์ฐ๋ฆฌ๊ฐ ๋ง๋ค ๋์ ํฉ์ ๊ฐ์ ์ ์ด๋ณด์๋ฉด ์์ ๊ฐ์ ์์ด๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ N[i][j]๋ ๋ํด์ค์ผ ํ๋ ๊ฒ์ด๋ค.
์ด์ ๋ https://life-study-1031.tistory.com/7 ์ฌ๊ธฐ์์ ์ ์ค๋ช
๋์ด์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋ค.
[๊ตฌ๊ฐํฉ]๋ฐฑ์ค - 11659๋ฒ
๋ฌธ์ : https://www.acmicpc.net/problem/11659 11659๋ฒ: ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 4 ์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N๊ณผ ํฉ์ ๊ตฌํด์ผ ํ๋ ํ์ M์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์๋ N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์๋ 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด
life-study-1031.tistory.com
๋์์์, ์ผ์ฐจ์์ ๋์ ํฉ์ ์ ์ฅํ ๋๋ S[i] = S[i-1] + N[i] ์ด ํํ๋ก ํ์๋๋ฐ,
์ด๊ฑด 2์ฐจ์ ๋ฐฐ์ด์์ ๋ค์ ํ๋ฒ ์๊ธฐ์ํค๋ฉด์ ์๊ฐํด๋ณด์,
S[i-1]์ ๋ํ๋ ์ด์ ๋ ๊ฒฐ๊ตญ ๊ทธ ํญ์ด ์ด๋ฒ ํญ ๊ทธ ์ ๊น์ง์ ๋์ ํฉ์ด๊ธฐ ๋๋ฌธ์ ๋ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ 2์ฐจ์์์๋ ์ด๋ป๊ฒ ํด์ผ ๊ทธ ์ ํญ๊น์ง์ ๊ฐ์ ๋ํ ์ ์์๊น?
๋ฐ๋ก ๊ฐ๋ก์ค๊ณผ ์ธ๋ก์ค์ ํ๋์ฉ ์ค์ธ ๊ฐ์ ๋ํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์์์ผ ํ ๊ฒ์, ์ด์ฐจ์ ๋ฐฐ์ด์ ๋ค๋ฃฐ ๋ A[i][j] ์ด๋ฐ ํํ๋ก ๋ค๋ฃจ๊ฒ ๋๋๋ฐ,
์ด ์๋ฆฌ๋ฅผ ์ ์์์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๋จ๋์ง์
์ ์ผ๋ก ๋งํ๋ฉด A[(๊ฐ๋ก์ค)][(์ธ๋ก์ค)]์ด๋ค.
์ด๊ฑธ ๊ทธ๋ฆผ์ผ๋ก ์ค๋ช
ํด๋ณด์๋ฉด ์๋์ ๊ฐ๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ๋ง์ฝ์ S(i,j) = S(2,3)์ ๋์ ํฉ์ ๊ตฌํด์ผ ํ๋ค๊ณ ํ์ ๋, S(1,3)์ ๊ฒฐ๊ตญ N(1,1)~N(1,3)๊น์ง ๋ํ ๊ฐ์ด๋ฉฐ, S(2,2)๋ N(1,1)+N(1,2)+N(2,1)+N(2,2)๋ฅผ ๋ค ๋ํ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ 1์ฐจ์ ๋ฐฐ์ด์์ ํ๋ ํ์ฌํญ ์ด์ ์ ํญ์ ๋ํ๋ ๊ฒ๊ณผ ๋์ผํ ์์์ด ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ํ ์ค์ฉ ์ค์ธ ๊ฒ์ ๋ํ๊ฒ ๋๋ฉด ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ๊ทธ๋ผ 2๋ฒ ๋ํด์ง๋ ๋ถ๋ถ์ด ์๊ธธ ํ ๋ฐ, ๊ทธ ๋ถ๋ถ์ ๋นผ์ค์ผ ํ์ง ์์๊ฐ? ๊ทธ๋์ ํ์ฌ ํญ์ ๋๊ฐ์ ์ ์๋ ํญ์ ๋นผ์ค๋ค. ์๋ฅผ ๋ค์ด S(2,3)์ ๊ตฌํ๋ค๊ณ ํด๋ณด๋ฉด, N(1,1), N(1,2)๋ ์ค๋ณต์ผ๋ก ๋ํด์ง๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ๋ถ๋ถ์ ๋นผ์ฃผ๊ธฐ ์ํด ๋๊ฐ์ ์ ์๋ ํญ์ ๋นผ์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด์ ๋จ์ ๊ฑด ํ๋๋ค.
์์ ์์ ๋์ค๋ S(2,2) ~ S(3,4)๊น์ง์ ํฉ์ ์ด๋ป๊ฒ ๊ตฌํ ๊ฒ์ด๋?
์ด๊ฒ๋ ๊ทธ๋ฆผ์ผ๋ก ๋ณด๋ฉด ํธํ๋ค.
๊ฐ์์ผ๋ก ์น ํ ๋ถ๋ถ์ด N(1,1) ~ N(3,4)๊น์ง ๋ชจ๋ ๋ํ ๊ฐ์ด๊ณ , ๋ถํ์์ ๊ฑฐ๊ธฐ์์ N(1,1) ~ N(1,4)๊น์ง ๋ํ ๊ฐ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ณด๋ผ์์ N(1,1) ~ N(3,1)๊น์ง ๋ํ ๊ฐ์ด๋ค.
์ฆ, ์ฐ๋ฆฌ๋ ์ ๊ฐ๋ค์ ๋นผ์ผ N(2,2) ~ N(3,4)๊น์ง์ ๊ฐ์ ๋ํ ์ ์๋ค.
๋ค๋ง ๊ทธ๋ฌ๋ฉด ๋ ๋ฒ ๋นผ๊ฒ ๋๋ ๊ฐ์ด ์๋ค. ๋ฐ๋ก N(1,1), N(1,2)์ด๋ค. ๋ฐ๋ผ์ ์ฒ์์ ์
๋ ฅ๋ฐ๋ x,y ๊ฐ์์ 1์ฉ ๋นผ์ฃผ๋ฉด ๋ ๋ฒ ๋นผ๊ฒ ๋๋ ๊ฐ์ ๊ฐ๋ฆฌํฌ ์ ์๊ณ , ๊ทธ๊ฑธ ๋ํด์ฃผ๋ฉด ๋๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ๊น์ง ์ค๋๋ผ ์ ๋ง ๋จธ๋ฆฌ๊ฐ ํฐ์ง ๊ฒ ๊ฐ์ ๊ธฐ๋ถ ๋๋ฌด ์ ์๋ค. ์ด์ ์ง์ง ๋ค ์๋ค.
์ฐ๋ฆฌ๋ ์ด๊ฑธ๋ก 2๊ฐ์ง๋ฅผ ๋์ถํ ์ ์๋ค.
โ 2์ฐจ์ ๋ฐฐ์ด์์ ๊ตฌ๊ฐํฉ์ ๊ตฌํ๋ ์:
S[(๊ฐ๋ก์ค)][(์ธ๋ก์ค)] = S[(๊ฐ๋ก์ค)-1][(์ธ๋ก์ค)] + S[(๊ฐ๋ก์ค)][(์ธ๋ก์ค)-1] - S[(๊ฐ๋ก์ค)-1][(์ธ๋ก์ค)-1]
โก ์ง์์ ๋ํ ๋ต์ ๊ตฌํ ์ ์๋ ์(x1, y1์ ์ฒ์์ ์
๋ ฅ๋ฐ๋ ์ขํ, x2, y2๋ ๋ ๋ฒ์งธ๋ก ์
๋ ฅ๋ฐ๋ ์ขํ):
S[x2][y2] - S[x1-1][y2] - S[x2][y1-1] + S[x1-1][y1-1]
์ด๊ฑธ ์ฝ๋ฉ์ผ๋ก ํํํ์๋ฉด ์๋์ ๊ฐ๋ค.
import java.io.*;
import java.util.*;
public class BOJ_11660 {
public static void main(String[] args) throws IOException{
// TODO ๋ฐฑ์ค 11660
//์
๋ ฅ์ ๋นจ๋ฆฌ ๋ฐ๊ธฐ ์ํด BufferedReader ํด๋์ค๋ฅผ ์ฌ์ฉํจ.
//์
๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ํ์ฑํ๊ธฐ ์ํด StringTokenizer ํด๋์ค๋ฅผ ์ฌ์ฉํจ.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[][] nums = new int[N+1][N+1];
long[][] sums = new long[N+1][N+1];
//์ซ์ ์
๋ ฅ๋ฐ๊ณ ํฉ ๊ตฌํ๊ธฐ
for(int i=1; i<=N; i++) {
st = new StringTokenizer(br.readLine());
for(int j=1; j<=N; j++) {
nums[i][j] = Integer.parseInt(st.nextToken());
sums[i][j] += sums[i-1][j] + sums[i][j-1] - sums[i-1][j-1] + nums[i][j];
}
}
//๋ต ๊ตฌํ๊ธฐ
for(int i=0; i<M; i++) {
st = new StringTokenizer(br.readLine());
int x1 = Integer.parseInt(st.nextToken());
int y1 = Integer.parseInt(st.nextToken());
int x2 = Integer.parseInt(st.nextToken());
int y2 = Integer.parseInt(st.nextToken());
System.out.println(sums[x2][y2] - sums[x1-1][y2] - sums[x2][y1-1] + sums[x1-1][y1-1]);
}
}
}
'โJAVA > ๐ฉโ๐ปBOJ(๋ฐฑ์ค)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํฌ ํฌ์ธํฐ, JAVA] ๋ฐฑ์ค - 2467 (0) | 2022.09.19 |
---|---|
[๊ตฌ๊ฐํฉ, JAVA] ๋ฐฑ์ค - 10986 (0) | 2022.08.20 |
[๊ตฌ๊ฐํฉ, JAVA]๋ฐฑ์ค - 11659๋ฒ (0) | 2022.08.16 |
[๋ฐฐ์ด, JAVA]๋ฐฑ์ค - 1546๋ฒ (0) | 2022.08.16 |
[๋ฐฐ์ด, JAVA] ๋ฐฑ์ค - 11720๋ฒ (0) | 2022.08.16 |