본문 바로가기
백준

[백준] 2167번 : 2차원 배열의 합 – JAVA [자바]

by Hongwoo 2022. 8. 2.
반응형

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

 

2167번: 2차원 배열의 합

첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 2167번 2차원 배열의 합은 브론즈 1 난이도의 구현 문제이다. 이 문제는 배열이 주어지고 (i, j)와 (x, y)가 같이 주어졌을 때 (i, j)부터 (x, y)까지의 합을 구하면 된다.

 

이 문제는 간단하지만 코드는 좀 길다. 그 이유는 입력으로 주어지는 것도 길고 배열도 초기화하고 각 테스트 케이스마다 i, j, x, y까지 입력받아야 하기 때문이다. 하지만 문제는 복잡하지 않다.

 

배열에 저장할 수들을 입력받은 후에는 그냥 for-loop을 이용해서 i, j부터 x, y까지 더하고 출력해주면 된다. 이 문제는 DP를 이용해서 더 효율적으로 풀 수도 있지만 이 글에서는 DP를 이용하지 않고 풀도록 하겠다.

 

자세한 코드는 밑에 있는 코드를 참고하면 되겠다.

 


  • 코드

 

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

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());
        StringBuilder sb = new StringBuilder();
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int[][] arr = new int[n][m];
        // 배열 초기화
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < m; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }
        int k = Integer.parseInt(br.readLine());
        for (int t = 0; t < k; t++) {
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken()) - 1;
            int j = Integer.parseInt(st.nextToken()) - 1;
            int x = Integer.parseInt(st.nextToken()) - 1;
            int y = Integer.parseInt(st.nextToken()) - 1;
            int sum = 0;
            
            // (i,j)부터 (x,y)까지 더하기
            for (int p = i; p <= x; p++) {
                for (int q = j; q <= y; q++) {
                    sum += arr[p][q];
                }
            }
            sb.append(sum + "\n");
        }
        System.out.print(sb);
    }
}

 

반응형

댓글