# 백준 : 유기농 배추 (1012)

문제

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

소스

(Github: https://github.com/wonjnlee/wallydev/blob/master/bj_1012_organiccabbage)

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstring>
#include <list>
#include <cmath>
using namespace std;

int M, N, K;
int map[51][51];
int visit[51][51];
vector <int> result;

void DFS(int y, int x) {
    visit[y][x] = 1;
    if((y > 0) && map[y - 1][x] && !visit[y - 1][x]) {
        DFS(y - 1, x);
    }
    if((y < N - 1) && map[y + 1][x] && !visit[y + 1][x]) {
        DFS(y + 1, x);
    }
    if((x > 0) && map[y][x - 1] && !visit[y][x - 1]) {
        DFS(y, x - 1);
    }
    if((x < M - 1) && map[y][x + 1] && !visit[y][x + 1]) {
        DFS(y, x + 1);
    }
}

int main(void)
{
    int testcase;
    int x, y;
    int cnt = 0;
    cin>>testcase;
    for(int i=0; i<testcase; i++) {
        cin>>M>>N>>K;
        for(int j=0; j<K; j++) {
            cin>>x>>y;
            map[y][x] = 1;
        }
        for(int k=0; k<N; k++) {
            for(int l=0; l<M; l++) {
                if(!visit[k][l] && map[k][l]) {
                    DFS(k, l);
                    cnt++;
                }
            }
        }
        result.push_back(cnt);
        cnt = 0;
        for(int k=0; k<51; k++) {
            for(int l=0; l<51; l++) {
                map[k][l] = 0;
                visit[k][l] = 0;
            }
        }
    }
    for(int i = 0; i<result.size(); i++) cout<<result[i]<<endl;
    return 0;
}

풀이

단지주소구하는 문제랑 너무 유형이 똑같아서 금방 풀었다.
한가지 주의할점은 '문제를 똑바로 읽자'는 것! 
x와 y좌표를 바꾸어서 입력받아야할줄이야.. 항상 꼼꼼하게 문제를 읽어보는 습관을 갖자.

댓글