백준 2167 2차원 배열의 합 문제풀이

김하영·2023년 4월 3일
1

prePreCodingTest

목록 보기
12/15

문제링크

접근

시작 좌표와 끝좌표 사이의 모든 값의 합을 구하는 것이 아니다!
시작 좌표와 끝좌표를 이은 직사각형 안에서 모든 값의 합을 구한다.

코드 및 코드 설명

import java.util.Scanner;

public class Main {
    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 + 1][m + 1]; // 2차원 배열 인덱스를 1부터 사용하기 위해
        
        // 2차원 배열 입력
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                arr[i][j] = sc.nextInt();
            }
        }
        
        int k = sc.nextInt();
        int x1, y1, x2, y2;
        // k번 반복
        for (int i = 0; i < k; i++) {
            int sum = 0;
            // 시작 좌표와 끝 좌표 입력
            x1 = sc.nextInt();
            y1 = sc.nextInt();
            x2 = sc.nextInt();
            y2 = sc.nextInt();
			// 시작 좌표에서 끝 좌표까지의 합 구하기
            for (int c = x1; c <= x2; c++) {
                for (int d = y1; d <= y2; d++) {
                    sum += arr[c][d];
                }
            }
            System.out.println(sum);

        }
    }
}

시행착오 및 교훈

처음에 시작 좌표에서 끝 좌표까지 모두의 합을 구하는 건줄 알고 시작 좌표가 있는 행에서 시작 좌표에서 끝까지 합을 구하고, 끝 좌표가 있는 행에서 처음부터 끝 좌표까지의 합을 구하고, 중간 행들은 모두 합을 구하는 방식으로 코드를 짰다.
하지만 문제를 잘 읽어보니 그렇게 짤 필요가 없었다. 그냥 시작 좌표와 끝좌표로 직사각형을 만들어서 그 직사각형의 합을 구해주면 되는 것이었다!!!!

문제를 잘 읽자!!!!!!!!!!!

profile
백엔드 개발자로 일하고 싶어요 제발

0개의 댓글