11660 구간 합 구하기 5
11660 구간 합 구하기 5 (c++)
문제
https://www.acmicpc.net/problem/11660
접근 방식
누적 합
누적합([startY][startX] -> [endY][endX]) = 누적합 [endY][endX] - 누적합[startY-1][endX] - 누적합[endY][startX-1] + 누적합[startY-1][startX-1]
문제 풀이
#include <iostream>
#define endl '\n'
using namespace std;
int N, M, sum, num, startY, startX, endY, endX, sumArr[1025][1025] = {};
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> N >> M;
for (int i = 1; i <= N; ++i)
{
sum = 0;
for (int j = 1; j <= N; ++j)
{
cin >> num;
sum += num;
sumArr[i][j] = sum + sumArr[i - 1][j];
}
}
while (M-- > 0)
{
cin >> startY >> startX >> endY >> endX;
cout << sumArr[endY][endX] - sumArr[startY - 1][endX] - sumArr[endY][startX - 1] + sumArr[startY - 1][startX - 1] << endl;
}
return 0;
}
다시 생각해 볼 점
- 변수는 시작부분에 한줄로 쭉 선언하는게, 필요한 부분마다 선언하는 것보다 시간 효율이 더 좋다.
- iostream 헤더를 쓰고, sync_with_stdio, cin.tie, cout.tie 설정을 해주는게, cstdio 에서 scanf, printf를 쓰는 것보다 시간 효율이 더 좋다.