๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Implementation

[๋ฐฑ์ค€]11660๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5 (Java)

์ ์ด 2022. 3. 16. 01:14
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ (Silver 1)

https://www.acmicpc.net/problem/11660

 

11660๋ฒˆ: ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5

์ฒซ์งธ ์ค„์— ํ‘œ์˜ ํฌ๊ธฐ N๊ณผ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ํ‘œ์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์ˆ˜๊ฐ€ 1ํ–‰๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๋„ค

www.acmicpc.net


ํ’€์ด

์•„์ด๋””์–ด

์ค„ ๋‹จ์œ„๋กœ ๋”ํ•ด์คŒ
[ ][ ][ ][ ][ ]
[ ][ ][o][o][ ] -> o ๋ถ€๋ถ„ ํ•ฉ: sum(2,5) - sum(2,2)
[ ][ ][o][o][ ] -> o ๋ถ€๋ถ„ ํ•ฉ: sum(3,5) - sum(3,2)
o์˜ ์ตœ์ข… ๋ถ€๋ถ„ ํ•ฉ: ( sum(2,5) - sum(2,2) ) + ( sum(3,5) - sum(3,2) )

์ฝ”๋“œ

๋”๋ณด๊ธฐ
package implement;

import java.util.*;
import java.io.*;

public class Main_11660_๊ตฌ๊ฐ„ํ•ฉ๊ตฌํ•˜๊ธฐ5 {
    public static void main(String[] args) throws Exception{
        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[][] map = new int[N][N];
        int[][] sum = new int[N][N]; // 0,0๋ถ€ํ„ฐ i,j๊นŒ์ง€ ํ•ฉ ์ €์žฅ
        for(int i =0 ; i < N ; i++){
            st = new StringTokenizer(br.readLine());
            for(int j =0 ; j < N ; j++){
                map[i][j] = Integer.parseInt(st.nextToken());
                if(i == 0 && j == 0){
                    sum[i][j] = map[i][j];
                }
                else if(j == 0){
                    sum[i][j] = sum[i-1][N-1]+map[i][j];
                } else{
                    sum[i][j] = sum[i][j-1] + map[i][j];
                }
            }
        }

        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;

            /**
             * ์ค„ ๋‹จ์œ„๋กœ ๋”ํ•ด์คŒ
             * [ ][ ][ ][ ][ ]
             * [ ][ ][o][o][ ] -> o ๋ถ€๋ถ„ ํ•ฉ: sum(2,5) - sum(2,2)
             * [ ][ ][o][o][ ] -> o ๋ถ€๋ถ„ ํ•ฉ: sum(3,5) - sum(3,2)
             *  => o์˜ ์ตœ์ข… ๋ถ€๋ถ„ ํ•ฉ: ( sum(2,5) - sum(2,2) ) + ( sum(3,5) - sum(3,2) )
             */
            int partial = 0;
            for(int j = x1 ; j <= x2 ; j++){
                if(y1 == 0 && j == 0) partial += sum[j][y2];
                else if(y1 == 0) partial += (sum[j][y2] - sum[j-1][N-1]);   
                else partial += (sum[j][y2]-sum[j][y1-1]);
            }
            sb.append(partial+"\n");
        }
        System.out.println(sb.toString());
    }
}
๋ฐ˜์‘ํ˜•