๋ฌธ์
https://www.acmicpc.net/problem/10026
๋์ ์ฝ์ง
์๊พธ ๋ง๋ ์ฝ๋์ธ๋ฐ ์ด์ํ๊ฒ ํ์์ (0, 0)์ด ๋ฌดํ์ ์ผ๋ก ์์ฑ๋ผ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฌ๋ค
1) ์ธ์๋ก char color๋ฅผ ๋๊ธฐ๊ณ board[nx][ny] != color๋ก ๋น๊ตํด์ ๊ทธ๋ฐ๊ฐ ๊ณ ๋ฏผ
2) const int MAX๋ฅผ ์จ์ ๊ทธ๋ฐ๊ฐ ๊ณ ๋ฏผ
๊ฒฐ๋ก
๋ค ์ธ๋ฐ์์๊ณ bfs ํจ์ ๋ฐํํ์ด void์ธ๋ฐ int๋ก ํด์ ๊ทธ๋ฐ ๊ฑฐ์๋ค.
์๋ ๋ฐํํ์ด int์ธ๋ฐ ์ ํ์ ๊ฐ์ด ๋ค์ด๊ฐ๋ ๊ฑด์ง ์ดํดํ ์ ์๋ค
์ฌ์ง์ด ์ด๊ฒ reple.it์์๋ ์ค๋ฅ๊ฐ ๋์ค๋๋ฐ clion์์๋ ๋ณด์ ์ด ๋๋ ๋ชจ์์ธ์ง ๊ฐ์ด ์ ๋์์ ๋ ํท๊ฐ๋ฆฌ๊ฒ ํ๋ค
์์ผ๋ก๋ repl.it์ ์ ๊ทน ์ด์ฉํด์ผ๊ฒ ๋ค ^.^
#include <iostream>
#include <queue>
using namespace std;
typedef pair<int, int> ci;
const int MAX = 101;
char board[MAX][MAX];
bool visited[MAX][MAX];
int n;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};
void bfs(int a, int b) {
queue<ci> 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 >= n || ny < 0 || ny >= n) continue;
if (visited[nx][ny] || (board[nx][ny] != board[a][b])) continue;
visited[nx][ny] = true;
q.push({nx, ny});
}
}
}
int findArea() {
int answer = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (!visited[i][j]) {
bfs(i, j);
answer++;
}
}
}
return answer;
}
int main() {
// ์๊ฐ ์ด๊ณผ
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> board[i][j];
int normal = findArea();
// visited ์ด๊ธฐํ
for (int i = 0; i < n; i++)
fill(visited[i], visited[i] + n, false);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == 'G')
board[i][j] = 'R';
}
}
int abnormal = findArea();
// ์ถ๋ ฅ
cout << normal << ' ' << abnormal;
}
'์ค๋์ ์ฝ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ALGO] BFS dist ๋ฐฐ์ด ํ์ฉ ๋ฌธ์ (0) | 2023.06.20 |
---|---|
[Spring] IntelliJ IDEA์์ maven archetype์ด ์๊ฑฐ๋ kotlin๋ฐ์ ์์ ๋(plugin ์ค์น) (0) | 2021.09.17 |
[์น] SeeMe ํ๋ก์ ํธ 2์ฃผ์ฐจ : ํ์ด์ง ๊ฐ๋ฐ (0) | 2021.07.07 |
[์น] SeeMe ํ๋ก์ ํธ 1์ฃผ์ฐจ : ์ฝ๋ฉ ์ด์ ์ค๊ณ (0) | 2021.07.07 |
๋๊ธ