코딩/PS
[NYPC 2022년도] 인류의 적 모기 퇴치 / 1번 문제
Insurrection
2022. 8. 25. 21:55
난이도 / 백준 티어 실버 이하
득점 200점

풀이
모든 좌표에서 + 형으로 검사를 하고, x 형으로 검사를 한다.
코드
#include <bits/stdc++.h>
using namespace std;
int a[100][100], n, m;
int x2[4]={1, 1, -1, -1};
int y2[4]={1, -1, -1, 1};
int x3[4]={1, 0, -1, 0};
int y3[4]={0, -1, 0, 1};
int k(int x, int y)
{
int P=a[x][y];
for(int j=0; j<4; j++)
{
for(int i=0; i<m; i++)
{
int X, Y;
X=x+(i+1)*x2[j]; Y=y+(i+1)*y2[j];
if((0<=X && X<n) && (0<=Y && Y<n))
{
P+=a[X][Y];
}
else break;
}
}
return P;
}
int w(int x, int y)
{
int P=a[x][y];
for(int j=0; j<4; j++)
{
for(int i=0; i<m; i++)
{
int X, Y;
X=x+(i+1)*x3[j]; Y=y+(i+1)*y3[j];
if((0<=X && X<n) && (0<=Y && Y<n))
{
P+=a[X][Y];
}
else break;
}
}
return P;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m; int K=0;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
cin>>a[i][j];
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
K=max(K, k(i, j));
K=max(K, w(i, j));
//cout<<i<<" "<<j<<" "<<K<<endl;
}
}
cout<<K;
return 0;
}
나는 함수를 사용하여 이 문제를 풀었는데,
이러한 구현 문제는 아무리 짧아도 함수를 사용하는 것이 조금 더 구현이 쉬운 것 같다.