Super Kawaii Cute Cat Kaoani [JAVA][Baekjoon] 11660번 구간 합 구하기 5

[JAVA][Baekjoon] 11660번 구간 합 구하기 5

2024. 3. 11. 23:46
728x90
SMALL
 

11660번: 구간 합 구하기 5

첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네

www.acmicpc.net


📌 접근 방법

앞에서 진행한 11659번 문제와 상당히 비슷하다.(링크를 걸어뒀으니 참고!)

  • 핑크색은 세로 가로의 누적합을 계속 더해준 상태로 입력한 값이 저장되어야 함! 
    • 하지만 중복되는 "?" 같은 값이 있기 때문에 빼준다
  • 기호로 정리하자면
    arr[i][j] = a[i-1][j] + a[i][j-1] -a[i-1][j-1] + input값

✅ PASS CODE

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
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());

      long [][]arr = 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++){
              arr[i][j] = arr[i][j-1] + arr[i-1][j] - arr[i-1][j-1] + Integer.parseInt(st.nextToken());
          }
      }
      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(arr[x2][y2] - arr[x1-1][y2] - arr[x2][y1-1] + arr[x1-1][y1-1]);
      }

   }
}

 

728x90
SMALL

 

728x90
LIST

BELATED ARTICLES

more