본문 바로가기
PS

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

by gamxong 2023. 2. 28.

백준 1012 : 유기농 배추

난이도 : 실버 2

시간 : 20분 소요

 

 

문제

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

 

1012번: 유기농 배추

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

www.acmicpc.net

 

풀이 과정

 

이 문제는 2차원 배열을 기준으로 bfs를 해주면 쉽게 풀 수 있다.

먼저 배추가 심어지는 위치를 2차원 배열로 저장한다.

그 후에는 배추가 심어지는 위치를 순차적으로 찾아서 방문처리(0처리)를 하고, 인접해 있는 배추도 방문처리(0처리)를 해준다.

이는 한 마리의 지렁이가 커버할 수 있는 영역을 방문처리해줬다고 생각하면 쉽다.

 

더이상 인접한 배추가 없으면 함수를 빠져나오고, 다시 배추가 심어진 위치를 찾으며 반복한다.

 

 

최종 코드

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>

using namespace::std;

int T;
int n,m,k;
int cnt;

int ba[51][51];
int ud[4] = {-1,1,0,0};
int lr[4] = {0,0,-1,1};

void bfs(int y, int x){
    queue<pair<int, int>> q;
    ba[y][x] = 0;
    cnt++;
    q.push({y,x});
    
    while(!q.empty()){
        int ty = q.front().first;
        int tx = q.front().second;
        q.pop();
       
        for(int i=0; i<4; i++){
            int ny = ty+ud[i];
            int nx = tx+lr[i];
            if(ny>=0 && nx>=0 && ny<=50 && nx<=50){
                if(ba[ny][nx] == 1){
                    ba[ny][nx] = 0;
                    q.push({ny,nx});
                }
            }
        }
        
    }
}

int main(){
    scanf("%d", &T);
    
    for(int i=0; i<T; i++){
        cnt = 0;
        scanf("%d %d %d", &m, &n, &k);
        for(int i=0; i<k; i++){
            int y,x;
            scanf("%d %d", &y, &x);
            ba[y][x] = 1;
        }
        
        for(int y=0; y<=50; y++){
            for(int x=0; x<=50; x++){
                if(ba[y][x] == 1){
                    bfs(y, x);
                }
            }
        }
        printf("%d\n", cnt);
        memset(ba, 0, sizeof(ba));
        
    }
}

 

 

'PS' 카테고리의 다른 글

[C++] 백준 7576 - 토마토  (0) 2023.02.28
[C++] 백준 1697 - 숨바꼭질  (0) 2023.02.28
[C++] 백준 1541 - 쉬운 최단거리  (0) 2023.02.28
[C++] 백준 1260 - DFS와 BFS  (0) 2023.02.28
[C++] 백준 1541 - 잃어버린 괄호  (0) 2023.02.24

댓글