본문 바로가기

코딩/PS

[NYPC 2022년도] 인류의 적 모기 퇴치 / 1번 문제

난이도 / 백준 티어 실버 이하

 

득점 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;
}

나는 함수를 사용하여 이 문제를 풀었는데,

이러한 구현 문제는 아무리 짧아도 함수를 사용하는 것이 조금 더 구현이 쉬운 것 같다.