본문 바로가기

Algorithm/BAEKJOON

[BOJ] 11123번 양 한마리... 양 두마리... (C++)

728x90
반응형

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

 

11123번: 양 한마리... 양 두마리...

얼마전에 나는 불면증에 시달렸지... 천장이 뚫어져라 뜬 눈으로 밤을 지새우곤 했었지.  그러던 어느 날 내 친구 광민이에게 나의 불면증에 대해 말했더니 이렇게 말하더군. "양이라도 세봐!"  

www.acmicpc.net

 

#include <iostream>
#include <queue>
#include <memory.h>
using namespace std;

int t, h, w, cnt = 0;
char arr[100][100];
bool visited[100][100];
int dx[4] = { -1, 0, 0, 1 };
int dy[4] = { 0, -1, 1, 0 };

void bfs(int a, int b){
	queue<pair<int, int>> q;
	q.push({a, b});
	visited[a][b] = true;
	
	while(!q.empty()){
		int x = q.front().first;
		int y = q.front().second;
		q.pop();
		
		for(int i = 0; i < 4; i++){
			int nx = x + dx[i];
			int ny = y + dy[i];
			
			if(!(nx >= 0 && nx < h && ny >= 0 && ny < w)) continue;
			
			if(!visited[nx][ny] && arr[nx][ny] == '#'){
				q.push({nx, ny});
				visited[nx][ny] = true;
			}
		}
	}
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	
	cin >> t;
	for(int i = 0; i < t; i++){
		cnt = 0;
		memset(visited, false, sizeof(visited));
		cin >> h >> w;
		for(int p = 0; p < h; p++){
			for(int q = 0; q < w; q++){
				cin >> arr[p][q];
			}
		}
		
		for(int p = 0; p < h; p++){
			for(int q = 0; q < w; q++){
				if(arr[p][q] == '#' && !visited[p][q]) {
					bfs(p, q);
					cnt++;
				}
			}
		}
		
		cout << cnt << endl;
	}
	return 0;
}
728x90
반응형

'Algorithm > BAEKJOON' 카테고리의 다른 글

[BOJ] 23843번 콘센트 (C++)  (0) 2022.05.01
[BOJ] 1700번 멀티탭 스케줄링 (C++)  (0) 2022.04.30
[BOJ] 3184번 양 (C++)  (0) 2022.04.30
[BOJ] 2589번 보물섬 (C++)  (0) 2022.04.29
[BOJ] 2636번 치즈 (C++)  (0) 2022.04.29