문제 링크: https://www.acmicpc.net/problem/3184
bfs 또는 dfs로 각 영역마다 양의 수, 늑대의 수를 세서 양이 많으면 양의 수를 누적, 아니면 늑대의 수를 누적해서 마지막에 출력하면 됩니다
#include <bits/stdc++.h>
using namespace std;
const int dy[] = { -1, 0, 1, 0 };
const int dx[] = { 0, 1, 0, -1 };
int r, c;
char board[250][250];
bool visited[250][250];
constexpr bool in_range(int y, int x) {
return y >= 0 && y < r&& x >= 0 && x < c;
}
void dfs(int y, int x, int& sheep, int& wolves) {
visited[y][x] = true;
if (board[y][x] == 'o') ++sheep;
else if (board[y][x] == 'v') ++wolves;
for (int i = 0; i < 4; ++i) {
auto ny = y + dy[i];
auto nx = x + dx[i];
if (in_range(ny, nx) && board[ny][nx] != '#' && !visited[ny][nx])
dfs(ny, nx, sheep, wolves);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
cin >> r >> c;
for (int i = 0; i < r; ++i)
for (int j = 0; j < c; ++j)
cin >> board[i][j];
int sheep_counter = 0, wolves_counter = 0;
for (int i=0; i<r; ++i)
for (int j = 0; j < c; ++j) {
int s=0, w=0;
if (!visited[i][j])
dfs(i, j, s, w);
if (s > w) sheep_counter += s;
else wolves_counter += w;
}
cout << sheep_counter << ' ' << wolves_counter << '\n';
return 0;
}
dfs로 짰습니다
bfs로 짜는게 메모리 덜 먹을 것 같네요
반응형
'Online Judge > 백준' 카테고리의 다른 글
[백준][C++] 3182: 한동이는 공부가 하기 싫어! (0) | 2020.07.31 |
---|---|
[백준][C++] 3181: 줄임말 만들기 (0) | 2020.07.31 |
[백준][C++] 19539: 사과나무 (0) | 2020.07.31 |
[백준][C++] 4883: 삼각 그래프 (0) | 2020.07.31 |
[백준][C++] 1516: 게임 개발 (0) | 2020.07.31 |