본문 바로가기
컴퓨터/알고리즘

[SWEA] 2001 파리 퇴치

by IT황구 2021. 1. 26.
728x90
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq&categoryId=AV5PzOCKAigDFAUq&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


#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
반응형