๊ธฐ๋ก๋ฐฉ

BOJ_11669 : ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5 ๋ณธ๋ฌธ

CodingTest/Java

BOJ_11669 : ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 5

Soom_1n 2022. 9. 22. 23:05

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

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

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

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • 2์ฐจ์› ๋ฐฐ์—ด์˜ ๊ตฌ๊ฐ„ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ๊ฐ„ ํ•ฉ์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ๋‹ค.
    • i = 1์ผ๋•Œ์™€ j = 1 ๋Š” 1์ฐจ์› ๋ฐฐ์—ด์˜ ๊ตฌ๊ฐ„ ํ•ฉ ์ฑ„์šฐ๊ธฐ ๊ณต์‹์ด ๊ฐ™๋‹ค : sum[i] = sum[i-1] + arr[i]
    • 2์ฐจ์› ๋ฐฐ์—ด ๊ตฌ๊ฐ„ํ•ฉ ๋ฐฐ์—ด์„ ์ฑ„์šฐ๋Š” ๊ณต์‹ : sum[i][j] = sum[i][j-1] + sum[i-1][j] - sum[i-1][j-1] + arr[i][j]
      • ๊ตฌํ•˜๋ ค๋Š” ์ธ๋ฑ์Šค์˜ ์œ„์ชฝ๊ณผ ์™ผ์ชฝ ๊ฐ’์„ ํ•ฉํ•˜๊ณ , ์™ผ์ชฝ ์œ„๋Š” ๊ฒน์น˜๋‹ˆ๊นŒ ๋นผ์ค€๋‹ค.
      • ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž…๋ ฅ๋œ ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๊ตฌ๊ฐ„ ํ•ฉ ๋ฐฐ์—ด ์ค€๋น„ ์™„๋ฃŒ.
  • ์ž…๋ ฅ๋ฐ›์€ ์ขŒํ‘œ ๋ฒ”์œ„์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค.
    • x1,y1 ๋ถ€ํ„ฐ x2, y2 ๋ฒ”์œ„์˜ ํ•ฉ : sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1] + sum[x1-1][y1-1]
    • ๊ตฌ๊ฐ„ ํ•ฉ์—์„œ ๊ฐ’์„ ๊ตฌํ•  ๋ฒ”์œ„์˜ ์™ผ์ชฝ์ค„๊ณผ ์œ„์ชฝ ์ค„์„ ๋นผ์ฃผ๊ณ , ๊ฒน์น˜๋Š” ์™ผ์ชฝ์œ„ ํ•œ ์นธ์€ ๋‹ค์‹œ ๋”ํ•ด์ค€๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

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 arr[][] = new int[n+1][n+1];
        long sum[][] = 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] = Integer.parseInt(st.nextToken());
            }
        }

        for (int i = 1; i <= n; i++){ // ๊ตฌ๊ฐ„ ํ•ฉ
            for (int j = 1; j <= n; j++){
                sum[i][j] = sum[i][j-1] + sum[i-1][j] - sum[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(sum[x2][y2] - sum[x1-1][y2] - sum[x2][y1-1] + sum[x1-1][y1-1]);
        }
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์ž…๋ ฅ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด arr์™€ ๊ตฌ๊ฐ„ ํ•ฉ์„ ์ €์žฅํ•  ๋ฐฐ์—ด sum์˜ ์ธ๋ฑ์Šค๋Š” 1~n์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • i์™€ j๋Š” 1~n
    • ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” 0๋ฒˆ ์ธ๋ฑ์Šค๋“ค์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜์–ด ์žˆ๋‹ค. (๊ณต์‹์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ)

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒ˜์Œ์—” 1์ฐจ์› ๋ฐฐ์—ด ๊ตฌ๊ฐ„ ํ•ฉ์„ ๋‹จ์ˆœ ๋ฐ˜๋ณตํ•˜๋ฉด ์‹œ๊ฐ„์ด ๋  ์ค„ ์•Œ๊ณ , ์—ด์—๋งŒ ๊ตฌ๊ฐ„ ํ•ฉ์„ ์‚ฌ์šฉํ•˜๊ณ  ํ–‰์€ ์ง์ ‘ ๋”ํ•ด์ฃผ๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.
  • x์™€ y๋ฅผ ๋ฐ˜๋Œ€๋กœ ์‚ฌ์šฉํ•ด์„œ 1ํšŒ ํ‹€๋ฆฌ๊ณ , ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š”๊ฑธ ํ™•์ธํ•œ๋’ค ๊ต์žฌ์˜ ํ’€์ด๋ฅผ ๋ณด๋ฉฐ ํ’€์—ˆ๋‹ค.
  • 2์ฐจ์› ๋ฐฐ์—ด์˜ ๊ตฌ๊ฐ„ ํ•ฉ์€ ์ •๋ง ์ƒ๊ฐ์ง€ ๋ชปํ•œ ๋ฐฉ์‹์ด๋ผ ์ข‹์€ ๊ณต๋ถ€๊ฐ€ ๋˜์—ˆ๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_10986 : ๋‚˜๋จธ์ง€ ํ•ฉ  (0) 2022.09.23
BOJ_1384 : ๋ฉ”์‹œ์ง€  (0) 2022.09.23
BOJ_1380 : ๊ท€๊ฑธ์ด  (0) 2022.09.22
BOJ_1343 : ํด๋ฆฌ์˜ค๋ฏธ๋…ธ  (0) 2022.09.21
BOJ_1340 : ์—ฐ๋„ ์ง„ํ–‰๋ฐ”  (0) 2022.09.20