백준 1388 c++

magicdrill·2024년 3월 22일
0

백준 문제풀이

목록 보기
190/655

백준 1388 c++

오랜만에 풀어본 DFS문제이다.
재귀함수로 풀어봤으니 다음에는 stack을 사용해 보겠다.

#include <iostream>
#include <vector>

using namespace std;

int N, M;
vector <vector <char>> board;
vector <vector <bool>> visited;

void input_floor()
{
	int i, j;

	cin >> N >> M;
	board.resize(N, vector<char>(M));
	visited.resize(N, vector<bool>(M, false));
	for (i = 0; i < N; i++)
	{
		for (j = 0; j < M; j++)
		{
			cin >> board[i][j];
		}
	}
	/*for (i = 0; i < N; i++)
	{
		for (j = 0; j < M; j++)
		{
			cout << board[i][j] << " ";
		}
		cout << "\n";
	}*/

	return;
}

void DFS(char wood, int i, int j)
{
	visited[i][j] = true;
	if (wood == '-')
	{
		if (j == M - 1 || board[i][j+1] != wood)
		{
			return;
		}
		if (wood == board[i][j + 1] && j + 1 < M)
		{
			DFS(wood, i, j + 1);
		}
	}
	else// wood == '|'
	{
		if (i == N - 1 || board[i + 1][j] != wood)
		{
			return;
		}
		if (wood == board[i + 1][j] && i + 1 < N)
		{
			DFS(wood, i + 1, j);
		}
	}
}

void find_answer()
{
	int i, j;
	int answer = 0;

	for (i = 0; i < N; i++)
	{
		for (j = 0; j < M; j++)
		{
			if (visited[i][j] == false)
			{
				answer++;
				DFS(board[i][j], i, j);
			}
		}
	}
	cout << answer << "\n";

	return;
}

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	input_floor();
	find_answer();

	return 0;
}

0개의 댓글