만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/programmers&bj

[C++] 백준 1012번 유기농 배추

D36choi 2020. 7. 7. 23:41
728x90

https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 �

www.acmicpc.net

 

flush - 배열을 0으로 초기화

out_of_bound - array index 의 잘못된 참조로 발생할 예외 방지

add_worm - 배치된 벌레가 커버가능한 배추들을 처리함

find_worm - 놓아야하는 벌레의 수를 계산

 

코드

#include <iostream>
#define MAX 50
using namespace std;

char loc[MAX][MAX] = {0};

int moveX[4] = {0,1,-1,0};
int moveY[4] = {1,0,0,-1};

void flush()
{
    for(int i=0; i<MAX; i++)
    {
        for(int j=0; j<MAX; j++)
        {
            loc[i][j] = 0;
        }
    }
}

int out_of_bound(int i,int j)
{
    if(i==-1 || j==-1 || i >=MAX || j >=MAX)
    {
        return 1;
    }
    else
    {
        return 0;
    }
    
}

void add_worm(int i, int j)
{
    for(int k=0; k<4; k++){
        if(out_of_bound(i+moveX[k],j+moveY[k]))
        {
            continue;
        }
        else if(loc[i+moveX[k]][j+moveY[k]])
        {
            loc[i+moveX[k]][j+moveY[k]] = 0;
            add_worm(i+moveX[k],j+moveY[k]);
        }
    }
    return;
}

void find_worm(int M,int N)
{
    int num_of_worm = 0;
    for(int i=0; i<M; i++)
    {
        for(int j=0; j<N; j++)
        {
            if(loc[i][j])
            {
                add_worm(i,j);
                num_of_worm++;
            }
        }
    }
    cout << num_of_worm<<"\n";
}

int main()
{
    int T;
    int M,N,K;
    int row,col = 0;
    cin >> T;
    for(int test = 0; test < T; test++)
    {
        cin >> M >> N >> K;
        for(int cav = 0; cav < K; cav++)
        {
            cin >> row >> col;
            loc[row][col] = 1;
        }
        find_worm(M,N);
        flush();
    }

    return 0;
}