난이도 / 백준 티어 실버 이하
득점 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;
}
나는 함수를 사용하여 이 문제를 풀었는데,
이러한 구현 문제는 아무리 짧아도 함수를 사용하는 것이 조금 더 구현이 쉬운 것 같다.
'코딩 > PS' 카테고리의 다른 글
[백준 1520] 내리막 길 / C++ (0) | 2022.11.26 |
---|---|
[백준 1110] 더하기 사이클 / 증명 (0) | 2022.09.06 |
[NYPC 2022년도] 카트라이더 보드게임 / 2번 문제 (0) | 2022.08.25 |
[백준 1050] 물약 (0) | 2022.08.17 |
[백준] 트리의 지름(1967번) (0) | 2022.08.15 |