이번엔 행렬의 부분 합을 구하는 문제입니다
(x1, y1) 부터 (x2, y2)까지의 합을 구해야합니다
예를들어서
(2,2) 에서 (3,4) 까지의 합이면
저렇게 6칸을 더해야 한다는 뜻입니다
2중 for문을 잘 이용하면 될 것 같습니다
코드입니다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
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[][] matrix = new int[n][n];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int linesum=0;
for (int j = 0; j < n; j++) {
linesum += Integer.parseInt(st.nextToken());
matrix[i][j] = linesum;
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int x1 = Integer.parseInt(st.nextToken()) - 1;
int y1 = Integer.parseInt(st.nextToken()) - 1;
int x2 = Integer.parseInt(st.nextToken()) - 1;
int y2 = Integer.parseInt(st.nextToken()) - 1;
int result=0;
if(y1==0) {
for(int j=x1;j<=x2;j++) {
result += matrix[j][y2];
}
}else {
for(int j=x1;j<=x2;j++) {
result += matrix[j][y2]-matrix[j][y1-1];
}
}
sb.append(result).append('\n');
}
System.out.print(sb);
}
}
저는 시간초과가 발생해서
여러번 다시 시도했습니다
'백준 문제풀기 > JAVA' 카테고리의 다른 글
[백준 11720 JAVA 자바] 숫자의 합 (0) | 2023.08.25 |
---|---|
[백준 11718 JAVA 자바] 그대로 출력하기 (0) | 2023.08.25 |
[백준 11659 JAVA 자바] 구간 합 구하기 4 (0) | 2023.08.25 |
[백준 11654 JAVA 자바] 아스키 코드 (0) | 2023.08.25 |
[백준 11653 JAVA 자바] 소인수분해 (0) | 2023.08.25 |