본문 바로가기

백준 문제풀기/JAVA

[백준 11660 JAVA 자바] 구간 합 구하기 5

이번엔 행렬의 부분 합을 구하는 문제입니다

(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);
    }
}

저는 시간초과가 발생해서

여러번 다시 시도했습니다