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

2021. 3. 27. 22:49알고리즘/BFS DFS

728x90
반응형

문제: www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

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

www.acmicpc.net

 

 

문제풀이

 

흰 배추 지렁이는 인접한 배추로 이동할 수 있으므로 서로 인접한 배추가 몇 군데 있는지를 알아내는 문제였다.

 

BFS를 이용하여 방문하지 않은 배추를 찾을 때마다 카운트를 증가시켜 서로 인접한 배추가 몇 군데 있는지를 알아냈다.

 

 

코드

#include <iostream>
#include <queue>

using namespace std;

int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
int board[50][50];
int vistited[50][50];


int main(){
    ios::sync_with_stdio(false); cin.tie(NULL);

    int t;
    cin>>t;

    while(t--){
        int m,n,k,cnt=0;
        cin>>m>>n>>k;

        while(k--){
            int x,y;
            cin>>x>>y;

            board[x][y] = 1;
        }

        queue<pair<int,int>> q;
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(vistited[i][j] || !board[i][j]) continue; //이미 방문한 배추이거나 배추가 아니면 continue
                q.push({i,j});
                vistited[i][j] = 1;
                cnt++; //새로운 영역을 찾았으므로 카운트

                while (!q.empty()){
                    pair<int,int> cur = q.front();
                    q.pop();

                    for(int dir=0; dir<4; dir++){
                        int nx = cur.first + dx[dir];
                        int ny = cur.second + dy[dir];

                        if(nx<0 || nx>=m || ny<0 || ny>=n) continue;
                        if(vistited[nx][ny] || !board[nx][ny]) continue;

                        vistited[nx][ny] = 1;
                        q.push({nx,ny});
                    }
                }
                
            }
        }

        cout<<cnt<<"\n";

        for(int i=0; i<m; i++){ //다음 테스트케이스를 위해 board와 visited를 초기화
            fill(board[i], board[i]+n, 0);
            fill(vistited[i], vistited[i]+n, 0);
        }
    }

    return 0;
}

 

 

결과

 

 

728x90
반응형

'알고리즘 > BFS DFS' 카테고리의 다른 글

[백준/C++] 9466번 텀 프로젝트  (0) 2021.03.28
[백준/C++] 7569번 토마토  (0) 2021.03.27
[백준/C++] 4179번 불!  (0) 2021.03.26
[백준/C++] 1697번 숨바꼭질  (0) 2021.03.26
[백준/C++] 7576번 토마토  (0) 2021.03.25