BOJ/[ BOJ ] C++

[ C++ ] #1012 유기농 배추

haena02 2023. 1. 29. 10:39
반응형

이번에는 몇모둠이 있나?에 대한 문제이다.

1을 찾아서 BFS를 진행하고 또 1을 찾아서 BFS를 하고

이런식으로 반복하면 금방 개수를 알 수 있지 않을까? 하는 생각이 들었다.

 

코딩해보자~!

 

우왕!! 한번에 맞았다.

디테일이 부족해서 계속 while문을 돌아 여러번에 디버깅이 필요햇지만

그래도 크게 어려움을 겪지 않고 성공했다!

 

#include<iostream>
#include<queue>
#include<vector>

using namespace std;

int farm[50][50];
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };

int main() {

	int a, num = 0,N, M ,K, x, y, flag = 0,sx,sy;
	cin >> a;

	for (int i = 0; i < a; i++) {  //테스트케이스만큼
		num = 0;
		queue<pair<int, int>> Q;
		flag = 0;

		cin >> M >> N >> K;

		for (int j = 0; j < K; j++) {  //입력받기
			cin >> y >> x;
			farm[x][y] = 1;
		}

		while (flag == 0) {  //개수세기

			for (int a = 0; a < N; a++) {  //1찾기
				for (int b = 0; b < M; b++) {
					if (farm[a][b] == 1) { Q.push({ a,b }); farm[a][b] = 0; goto start; }
				}
			} flag = 1; continue;  //한번의 테스트케이스 종료

		start:  //BFS진행

			while (!Q.empty()) {
				pair<int, int > C = Q.front();
				Q.pop();

				for (int j = 0; j < 4; j++) {
					int nx = C.first + dx[j];
					int ny = C.second + dy[j];

					if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
					if (farm[nx][ny] == 0) continue;

					Q.push({ nx,ny });
					farm[nx][ny] = 0;
				}
			} num++;
		}
		cout << num << "\n";
	}

}
반응형

'BOJ > [ BOJ ] C++' 카테고리의 다른 글

[ C++ ] #1629 곱셈  (0) 2023.02.17
[ C++ ] #10026 적록색약  (0) 2023.02.09
[ C++ ] #1697 숨바꼭질  (0) 2023.01.27
[ C++ ] #4179 불!  (0) 2023.01.26
[ C++ ] #7576 토마토  (0) 2023.01.23