본문 바로가기

C/Algorithm with 백준

1012번 유기농 배추 탐색

진짜 오랫동안 풀었습니다..

처음에는 BFS를 활용하여 풀어야 한다 생각하고,

그렇게 계속 풀다가 잘못생각했다는것을 알아었다.

왜냐하면 문제를 푸는 도중..

모두 탐색하고 방문했던 인덱스를 무시하는 방법만이 붙어있는 배추를 지렁이를 둘 하나의 공간으로 세는 것이 가능한 방법이었다는 사실을 알아냈기 때문이다.

그래서 DFS를 활용하여 풀어보았다..

이 문제 꼭 풀어보고 싶었는데.. 여기까지 온 것이 행복하고 신기하다..

이건 내 친구 동훈이 덕분에 잘 풀어내었다.

백준 링크는 아래와 같다 이 알고리즘을 풀어내었다!!!!

기분은 좋다.

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

 

1012번: 유기농 배추

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

www.acmicpc.net

#include <stdio.h>

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



void DFS(int y, int x) {
    int next_x, next_y;
    for(int o=0; o<4; o++) {
        next_x = dx[o]+x;
        next_y = dy[o]+y;
        if(next_x < 0 || next_x >=M || next_y <0 || next_y >=N) {
            continue ;
        }
        if(arr[next_y][next_x] && !vis[next_y][next_x]) {
            vis[next_y][next_x] = 1;
            DFS(next_y, next_x);
        }
    }
}

int main() {
    int x, y, T, cnt;
    scanf("%d", &T);
    while(T) {
        scanf("%d %d %d", &M, &N, &P);
        for(int i=0; i<N; i++) {
            for(int j=0; j<M; j++) {
                arr[i][j] = 0;
                vis[i][j] = 0;
            }
        }
        cnt = 0;
        for(int i=0; i<P; i++) {
            scanf("%d %d", &x, &y);
            arr[y][x] = 1;
        }
        for(int i=0; i<N; i++) {
            for(int j=0; j<M; j++) {
                if(arr[i][j] && !vis[i][j]) {
                    vis[i][j] = 1;
                    cnt+=1;
                    DFS(i, j);
                }
            }
        }
        printf("%d\n", cnt);
        T-=1;
    }
}

'C > Algorithm with 백준' 카테고리의 다른 글

2606번 바이러스  (0) 2022.05.03
피보나치수열 DP  (0) 2022.05.03
1094번 막대기  (0) 2022.05.03
2178번 미로탐색  (0) 2022.05.03
9012번 괄호 (스택활용)  (0) 2022.05.03