CODING TEST

백준 2167번 - 2차원 배열의 합

우진하다 2023. 5. 29. 22:34

 

나의 풀이.

처음에 문제를 봤을 때 경로에 대한 합이라고 해서 그 앞에 모든 길을 지나야 접근해 더해준다고 생각했는데
예제 1의 마지막 줄이 음? 아닌데 해서 다시 생각해보니 인덱스 증가에 따른 합을 구해주면 되는 문제였다.

가령 i, j , x, y -> 1, 1, 2, 3 이면 [1][1], [1][2], [1][3], [2][1], [2][2], [2][3] 을 더해주면 된다.
모든 2차원배열의 합이므로 63이 나온다.
1, 2, 1, 2 일 경우에는 [1][2], [1][2] 변함이 없기에 하나의 값만 더해준다.
1, 3, 2, 3 일 경우에는 [1][3], [2][3] 만 더해주면 되서 36이 나온다.
그려가면서 한 40분 고민했던거 같다....

import java.util.Scanner;

public class TwoDimension2167 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int M = sc.nextInt();
        int[][] arr = new int[N][M];

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = sc.nextInt();
            }
        }
        
        int K = sc.nextInt(); 
        
        for (int k = 0; k < K; k++) {
            int i = sc.nextInt();
            int j = sc.nextInt();
            int x = sc.nextInt();
            int y = sc.nextInt();

            int sum = 0;
            for (int row = i - 1; row < x; row++) {
                for (int col = j - 1; col < y; col++) {
                    sum += arr[row][col];
                }
            }
            System.out.println(sum);
        }
    }
}

 


문제 출처 : https://www.acmicpc.net/problem/2167