습관처럼

백준 1012 - 유기농 배추 본문

Algorithms/BOJ

백준 1012 - 유기농 배추

dev.wookii 2020. 1. 28. 13:49

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

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. (

www.acmicpc.net

문제


유기농 배추밭에 필요한 흰 지렁이의 개수를 구하는 문제로 인접하여 생기는 배추 영역의 개수가 전체 필요한 지렁이의 개수이다.

 

문제 풀이 


전형적인 BFS, DFS 문제이다. 영역의 개수를 구하는 것이 핵심 포인트이며 정답이 된다.

 

코드


#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;
int M,N,K,testcase,ans=0;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int map[50][50]={0,};

bool inside(int x,int y){	//메트릭스에 좌표가 포함되는지 확인하는 함수
    return ((x>=0&&x<M)&&(y>=0&&y<N));
}

void bfs(int x,int y){	//BFS 함수
    map[x][y] = 0;
    queue<pair<int,int> >q;
    q.push(make_pair(x,y));
    while(!q.empty()){
        int x=q.front().first;
        int y=q.front().second;
        q.pop();
        for(int i=0;i<4;i++){
            int nx=x+dx[i];
            int ny=y+dy[i];
            if(inside(nx,ny)&&map[nx][ny]==1){
                q.push(make_pair(nx,ny));map[nx][ny]=0;
            }
        }
    }
}

int main(void){
    std::ios::sync_with_stdio(false); cin.tie(0);
    scanf("%d", &testcase);
    while(testcase--){	//테스트케이스 개수만큼 받기 
        scanf("%d %d %d", &M, &N, &K);
        for(int i=0;i<K;i++){
            int x,y;
            scanf("%d %d", &x, &y);
            map[x][y]=1;
        }
        for(int i=0;i<M;i++){
            for(int j=0;j<N;j++){
                if(map[i][j]==1){
                    bfs(i,j);ans++;
                }
            }
        }
        printf("%d\n",ans); //필요한 지렁이의 개수 
        for(int i=0;i<M;i++){	//map 초기화 장치
            for(int j=0;j<N;j++){
                map[i][j]=0;
            }
        }
        ans=0;   //지렁이 개수 초기화
    }
}

'Algorithms > BOJ' 카테고리의 다른 글

백준 14503 - 로봇 청소기  (0) 2020.02.05
백준 2455 - 지능형 기차  (0) 2020.02.04
백준 7569 - 토마토  (0) 2020.01.29
백준 2583 - 영역구하기  (0) 2020.01.28
백준 12865 - 평범한 배낭  (0) 2020.01.21