백준(BaekJoon)

[BaekJoon/C] No.11660 : 구간 합 구하기 5

ekdnjs510 2024. 11. 4. 20:38
728x90

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

 

소스코드 & 문제풀이

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int arr[1025][1025]; //2차원 배열 사용합니다

int main(void)
{
	int N, M; //N*N개의 수를 받을 변수 N과 M번 반복할 변수를 선언합니다
	int x1, x2, y1, y2;

	scanf("%d %d", &N, &M); //변수 N과 M을 입력받습니다
	
    //2차원 배열을 통해 N행 N열의 들어갈 수를 입력받습니다
    for (int i = 1; i <= N; i++)
	{
		for (int j = 1; j <= N; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}

//(1,1)부터 현재 해당하는 배열까지의 (전체)합을 구해주는 반복문입니다
	//입력한 배열의 값을 같은 열 위아래로 더한 값을 현재 위치에 저장합니다
	for (int i = 1; i <= N; i++)
	{
		for (int j = 1; j <= N; j++)
		{
			arr[i][j] = arr[i][j] + arr[i - 1][j];
		}
	}
    //입력한 배열의 값 같은 행 왼쪽오른쪽 더한 값을 현재 위치에 저장합니다
	for (int i = 1; i <= N; i++)
	{
		for (int j = 1; j <= N; j++)
		{
			arr[i][j] = arr[i][j] + arr[i][j - 1];
		}
	}

	for (int i = 1; i <= M; i++)
	{
		scanf("%d %d %d %d", &x1, &y1, &x2, &y2); // 횟수 M번 반복하며 x행 y열 입력받습니다
		
        //앞서 구한 배열합에서 범위에 포함되지 않는 행과 열을 빼주고
		//뺀 행과열의 중복된 범위를 다시 더해줍니다
        printf("%d\n", arr[x2][y2] - arr[x1 - 1][y2] - arr[x2][y1 - 1] + arr[x1 - 1][y1 - 1]);
	}

	return 0;
}

 

제 입출력 결과

 

728x90