본문 바로가기
코딩테스트_백준풀이

유기농 배추 #1012 c++ 풀이

by wanna_dev 2023. 10. 24.

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

 

1012번: 유기농 배추

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

www.acmicpc.net

 

유기농 배추를 풀기 위해 dfs 에 대해서 공부했다.

https://wannadev.tistory.com/96

 

BFS, DFS c++

- DFS란, 그래프 전체를 탐색하는 하나의 방법으로써, 하나의 가지(branch)를 모두 탐색한 이후에 다음 branch로 이동하는 방법이다. - 시작 노드에서 깊이가 커지는 방향으로 탐색을 진행하여 더 이

wannadev.tistory.com

 

DFS관점에서 이차원 배열문제를 마주하면 각각 배열 인덱스에 대한 값을 노드로 보면 될것 같다.

 

 

#include<iostream>
#include<vector>
#include<cstring>

using namespace std;


int board[51][51];
int visited[51][51];
int ans = 0;
int dy[4] = { 0,1,0,-1 };
int dx[4] = { 1,0,-1,0 };


void dfs(int y, int x) {
	for (int i = 0; i < 4; i++) {
		if (visited[y + dy[i]][x + dx[i]] == 0 && board[y + dy[i]][x + dx[i]] == 1) {
				visited[y + dy[i]][x + dx[i]] = 1;
				dfs(y + dy[i], x + dx[i]);
		}
	}

}

int main() {
	int M, N, K,T;
	cin >> T;
	while (T--) {
		memset(board, 0, sizeof(board) );
		memset(visited, 0, sizeof(visited));
		ans = 0;

		cin >> M >> N >> K;
		for (int i = 0; i < K; i++) {
			int X, Y;
			cin >> X >> Y;
			board[Y][X] = 1;
		}
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				if (board[i][j] == 1 && visited[i][j]==0) {
					visited[i][j] = 1;
					dfs(i, j);
					ans++;
				}
			}

		}
		cout << ans << '\n';
		//cout << "  " << endl;
		
	}
	

	return 0;
}

1일때만 dfs 돌린다. 그 수를 센다. 

'코딩테스트_백준풀이' 카테고리의 다른 글

리모컨 #1107 c++ 풀이  (0) 2023.10.24
DFS와 BFS #1260 c++ 풀이  (1) 2023.10.24
Z #1074 c++ 풀이  (0) 2023.10.23
피보나치 함수 #1003 c++ 풀이  (1) 2023.10.23
solved.ac #18110 c++ 풀이  (0) 2023.10.13