๐ ๋ฌธ์ ๋งํฌ
๐ ํ์ด ๊ณผ์
- ๋์ ํฉ๊ณผ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ์ ํ์ ๋ฌธ์ ์
๋๋ค.
- 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ธํ์ฌ ์
๋ ฅ ๊ฐ์ ํ ๋นํฉ๋๋ค.
- dp 2์ฐจ์ ๋ฐฐ์ด์ ์ ์ธํ์ฌ ๊ฐ ํ, ์ด๋ง๋ค์ ๊ฐ์ ๋์ ํ์ฌ ๋ํ์ฌ ๊ณ์ฐํฉ๋๋ค.
- ์ด ๋, dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + arr[i][j]์ ์์ ์ด์ฉํฉ๋๋ค.
- ๋ํ, ๋์ ํฉ์ ์ด์ฉํ์ฌ ํด๋นํ๋ ๋ฒ์์ ๊ฐ์ ๊ณ์ฐํ๋ ค๋ฉด, dp[x2][y2] - dp[x2][y1-1] - dp[x1-1][y2] + dp[x1-1][y1-1] ์์ ์ด์ฉํด์ ๊ณ์ฐํ ์ ์์ต๋๋ค.
- ์ด ๋, ๋ง์ง๋ง์ ๊ฐ์ ๋ํ๋ ์ด์ ๋ ์ค๋ณต์ผ๋ก ์ ๊ฑฐ๋์๊ธฐ ๋๋ฌธ์
๋๋ค.
๐ป ์ฝ๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] arr,dp;
static int n,m;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
arr = new int[n+1][n+1];
dp = new int[n+1][n+1];
for(int i = 1; i< n + 1; i++){
st = new StringTokenizer(br.readLine()," ");
for(int j = 1; j< n + 1; j++){
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int i = 1; i< n+1; i++){
for(int j = 1; j< n+1; j++){
dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + arr[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(solve(x1,y1,x2,y2));
}
}
private static int solve(int x1, int y1, int x2, int y2){
return dp[x2][y2] - dp[x2][y1-1] - dp[x1-1][y2] + dp[x1-1][y1-1];
}
}
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1753๋ฒ : ์ต๋จ๊ฒฝ๋ก (Java) (0) | 2022.02.12 |
---|---|
๋ฐฑ์ค 2206๋ฒ : ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (Java) (0) | 2022.02.12 |
๋ฐฑ์ค 1149๋ฒ : RGB๊ฑฐ๋ฆฌ (Java) (0) | 2022.01.17 |
๋ฐฑ์ค 15657๋ฒ : N๊ณผ M (8) (Java) (0) | 2022.01.17 |
๋ฐฑ์ค 15654๋ฒ : N๊ณผ M (5) (Java) (0) | 2022.01.17 |