728x90
반응형
#include<cstdio>
#include<cstring>
typedef long long ll;
using namespace std;
int Board[15][15];
int main()
{
int tc;
int N,M;// N = BoardSize, M = attack size
int max;
int sum = 0;
scanf("%d",&tc);
for(int i = 0; i < tc; i++)
{
scanf("%d %d",&N,&M);
max = 0;
for(int j = 0; j < N; j++)
{
for(int k = 0; k < N;k++)
{
scanf("%d",&Board[j][k]);
}
}
// Make Board
for(int j = 0; j <= N-M; j++)
{
for(int k = 0; k <= N-M;k++) // N-M 인 이유. 불필요한 부분 제거
{
sum = 0;
for(int x = 0; x < M; x++)
{
for(int y = 0; y < M; y++)
{
sum += Board[j+x][k+y];
}
}
if( max < sum){
max = sum;
}
}
}
printf("#%d %d\n",i+1,max);
}
return 0;
}
내 방법: 완전 탐색
배운점 : 처음에 i,j 를 Board Size처럼 N으로 뒀는데, 이러면 x,y에서 탐색시에 if( array bound check) 필요함.
N-M 으로 하면 애초에 다 움직이더라도 array bound에 안걸리게 됨.
심지어 탐색 횟수도 줄게됨.
앞으로 이렇게 전체 탐색 시에는 무조건 BoundCheck 보다는 Bound가 넘어가지 않게 for문을 조정하는걸 먼저 생각해야겠음.
==END
728x90
반응형
'컴퓨터 > 알고리즘' 카테고리의 다른 글
[SWEA] 1979 어디에 단어가 들어갈 수 있을까 (0) | 2021.01.28 |
---|---|
[SWEA] 1983 조교의 성적 매기기 (0) | 2021.01.27 |
[SWEA] 2005 파스칼의 삼각형 (0) | 2021.01.25 |
[SWEA] 2056 연월일달력(야비한수법) (0) | 2021.01.22 |
[C++ 기초] 반복문으로 숫자 자릿수마다 자르기. (0) | 2021.01.19 |