진짜 오랫동안 풀었습니다..
처음에는 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 |