C/Algorithm with 백준
1012번 유기농 배추 탐색
OHDONGHYEON
2022. 5. 3. 19:39
진짜 오랫동안 풀었습니다..
처음에는 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;
}
}