본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

문제링크



그렇게 어려운 문제는 아니였다. 오히려 문제를 이해하는데 시간이 더 걸린 것 같다.

배열에 인자를 입력받는 것은 어렵지 않았지만 계산하는데 살짝  고민을 했다.


   for (int index_x = 0; index_x < index.length; index_x++) {
            int total = 0;
            for (int i = index[index_x][0] - 1; i <= index[index_x][2] - 1; i++) {
                for (int j = index[index_x][1] - 1; j <= index[index_x][3] - 1; j++) {
                    total += data[i][j];
                }
            }
            result[index_x] = total; // 결과 값 저장
        }

제일 중요한 부분이다.
index Array에는 좌표값이 저장되어 있다. 배열의 0번째와 2번째, 1번째와 3번째를 가지고 계산할 좌표를 구할 수 있다.


소스 공유

import java.util.Scanner;

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

public class TwoTwoTotal {
    static int height, length, K;
    static int result[], data[][], index[][];

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in); // 문자 입력을 인자로 Scanner 생성
        height = scan.nextInt();
        length = Integer.parseInt(scan.nextLine().trim());

        data = new int[height][length];

        for (int i = 0; i < height; i++) {
            for (int j = 0; j < length; j++) {
                if (j == length - 1)
                    data[i][j] = Integer.parseInt(scan.nextLine().trim());
                else
                    data[i][j] = scan.nextInt();
            }
        }

        K = Integer.parseInt(scan.nextLine().trim());
        result = new int[K];
        index = new int[K][4];

        for (int i = 0; i < K; i++) {
            for (int j = 0; j < 4; j++) {
                if (j == 3)
                    index[i][j] = Integer.parseInt(scan.nextLine().trim());
                else
                    index[i][j] = scan.nextInt();
            }
        }
        
        arrayCal();
        for(int i=0;i<result.length;i++)
            System.out.println(result[i]);

    }

    static public void arrayCal() {
        for (int index_x = 0; index_x < index.length; index_x++) {
            int total = 0;
            for (int i = index[index_x][0] - 1; i <= index[index_x][2] - 1; i++) {
                for (int j = index[index_x][1] - 1; j <= index[index_x][3] - 1; j++) {
                    total += data[i][j];
                }
            }
            result[index_x] = total; // 결과 값 저장
        }
    }
}