중요 지식


DFS - 배추가 모여있는 곳에서 어느 땅이 속해있는지 탐색해야 한다 

fill() - 테스트 케이스를 재 실행하기 위해 프로그램 세팅을 초기화시켜야 한다 

 

코드


#include <iostream>
#include <algorithm>

using namespace std;

int N, M;
int farm[51][51] = {0};
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

void DFS(int x, int y){
    farm[x][y] = 0;

    for(int i = 0; i < 4; i++){
        int nx = x + dx[i];
        int ny = y + dy[i];
        
        if((nx >= 0 && nx <= N) && (ny >= 0 && ny <= M) && farm[nx][ny] == 1){
            DFS(nx, ny);
        }
    }
}

int main(){
    int T, K;
    int X, Y;
    int count;

    cin >> T;

    for(int i = 0; i < T; i++){
        cin >> N >> M >> K;

        fill(&farm[0][0], &farm[N-1][M], 0);
        count = 0;

        for(int j = 0; j < K; j++){
            cin >> X >> Y;
            farm[X][Y] = 1;
        }

        for(int xi = 0; xi < N; xi++){
            for(int yj = 0; yj < M; yj++){
                if(farm[xi][yj]){
                    count++;
                    DFS(xi, yj);
                }
            }
        }

        cout << count << endl;
    }

    return 0;
}

풀이


1. 밭 전체를 나타내는 farm배열을 만들고, 배추가 있는 좌표를 저장한다.

2. 밭 전체를 순회하면서 배추가 있다면 주변에 근접한 배추가 있는지 탐색한다  -DFS

3. 끝  

 

'프로그래밍 문제집 > 백준' 카테고리의 다른 글

1107번-리모컨  (0) 2022.02.07
1074번-Z  (0) 2022.02.03
1260번-DFS와 BFS  (0) 2022.01.29
1003번-피보나치 함수  (0) 2022.01.26
1259번-팰린드롬수  (0) 2022.01.24

+ Recent posts