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

Alice·2023년 3월 31일
0

풀이 소요시간 : 15분


어렵지 않은 기초 탐색문제다.
쉬운 문제를 쉽게 풀고, 실수하지 않게 정밀하게 코드를 짜는 연습을 하고있다.
무작정 일단 코드짜고 실행하는게 아니라, 검토하는 습관을 들이자.

전체코드


#include <iostream>
using namespace std;

int T;
int H, W;

char map[101][101];
int visit[101][101];

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


void Input() {

	cin >> H >> W;
	for (int i = 1; i <= H; i++) {
		for (int j = 1; j <= W; j++) {
			cin >> map[i][j];
		}
	}

}

void Clear() {
	memset(map, 0, sizeof(map));
	memset(visit, 0, sizeof(visit));
	cnt = 0;
}

void Dfs(int x, int y) {

	for (int i = 0; i < 4; i++) {
		int nx = x + dx[i];
		int ny = y + dy[i];


		if (nx < 1 || ny < 1 || nx > H || ny > W) continue;
		if (visit[nx][ny] == 1 || map[nx][ny] != '#') continue;

		visit[nx][ny] = 1;
		Dfs(nx, ny);
	}

}

int main() {

	cin >> T;
	for (int n = 1; n <= T; n++) {

		Input();
		
		for (int i = 1; i <= H; i++) {
			for (int j = 1; j <= W; j++) {
				if (map[i][j] == '#' && visit[i][j] == 0) {
					visit[i][j] = 1;
					cnt++;
					Dfs(i, j);
				}
			}
		}
		
		cout << cnt << '\n';
		Clear();

	}


}
profile
거창하지 않아도, 늘 꾸준히 기록하는 습관

0개의 댓글