48강
cf) 정수를 나눗셈을 하고 반올림을 처리하기를 원하는 경우에는 0.5를 더해주면 된다.
49강
cf) 2차원 배열의 경우 행을 먼저 처리하고, 열을 처리 할 때, 행에 대해서 먼저 처리를 하고 열에 대해서 처리를 하여 덮어씌우는 느낌으로 하면 더 쉽게 풀 수 있다. 마치 and 연산처럼
51강
#include <stdio.h>
#include <algorithm>
#include <vector>
#include <iostream>
#include <math.h>
using namespace std;
int main(){
//freopen("input.txt", "rt", stdin);
int h,w;
int hidx=0;
int widx=0;
int sh,sw;
int sum=0;
int max=-214000000;
scanf("%d %d",&h,&w);
vector<vector<int> > map(h,vector<int>(w,0));
for(int i=0; i<h ; i++)
{
for(int j=0;j<w;j++)
{
scanf("%d",&map[i][j]);
}
}
scanf("%d %d",&sh,&sw);
vector<vector<int> > calc(h,vector<int>(w-sw+1,0));
for(int i=0; i < h ; i++){
for(int l=0; l < sw ; l++){
sum+=map[hidx][widx++];
}
calc[i][0]=sum;
for(int j=1; j < w-sw+1 ; j++){
calc[i][j]=calc[i][j-1]-map[i][j-1]+map[i][j+sw-1];
sum=0;
}
widx=0;
hidx++;
}
hidx=0;
widx=0;
vector<vector<int> > result(w-sw+1,vector<int>(h-sh+1,0));
for(int i=0 ; i < calc[0].size() ; i++){
for(int l=0; l < sh ; l++ ){
sum += calc[hidx++][widx];
}
result[i][0]=sum;
if(max < result[i][0] ) max=result[i][0];
for(int j=1 ; j < calc.size()-sh+1 ;j++){
result[i][j]=result[i][j-1]-calc[j-1][i]+calc[j+sh-1][i];
if(max < result[i][j] ) max=result[i][j];
sum=0;
}
hidx=0;
widx++;
}
cout << max;
}
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int a[701][701], dy[701][701];
int main(){
freopen("input.txt", "rt", stdin);
int h, w, n, m, i, j, tmp, max=-2147000000;
scanf("%d %d", &h, &w);
for(i=1; i<=h; i++){
for(j=1; j<=w; j++){
scanf("%d", &a[i][j]);
dy[i][j]=dy[i-1][j]+dy[i][j-1]-dy[i-1][j-1]+a[i][j];
}
}
scanf("%d %d", &n, &m);
for(i=n; i<=h; i++){
for(j=m; j<=w; j++){
tmp=dy[i][j]-dy[i-n][j]-dy[i][j-m]+dy[i-n][j-m];
if(tmp>max) max=tmp;
}
}
printf("%d\n", max);
return 0;
}