๋ฌธ์
https://www.acmicpc.net/problem/1303
๋ฌธ์ ์ดํด
N × M ์ ์ํฐ์์ ์ฐ๋ฆฌ ๋ณ์ฌ(W)์ ์๋ ฅ์ ํฉ๊ณผ ์ ๊ตญ์ ๋ณ์ฌ(B)์ ์๋ ฅ์ ํฉ์ ๊ตฌํ๋ค.
N๋ช ์ด ๋ญ์ณ์์ ๋ N²์ ์๋ ฅ์ ๋ผ ์ ์๋ค.
๋ฌธ์ ํ์ด
๐ก DFS & BFS
- ์ฒซ ๋ฒ์งธ ์นธ๋ถํฐ dr, dc ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ฐ์ ๋ฌธ์('W' / 'B')๊ฐ ์๋ ๊ณณ์ ์ํ์ข์ฐ๋ก ํ์ํ๋ค.
์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ณณ์ ํ์ํ์ง ์๋๋ค. - ํ์ํ๋ ๊ณณ์ ๋ฐฉ๋ฌธ ํ๊ธฐํ๊ณ , ํด๋น ๋ณ์ฌ ์ ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- ํ์์ ์ข ๋ฃํ ํ ๋ญ์ณ์๋ ๋ณ์ฌ์ ์๋ ฅ์ ์ ์ฅํ๋ค.
- ๋ณ์ฌ์ ์๋ ฅ์ ํฉํ ๊ฐ์ ๊ฐ๊ฐ ์ถ๋ ฅํ๋ค.
์ฝ๋
1๏ธโฃ DFS
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int n, m, cnt;
char color;
vector<vector<char>> board;
vector<vector<bool>> visited;
vector<int> w, b;
int dr[4] = {-1, 1, 0, 0};
int dc[4] = {0, 0, -1, 1};
void dfs(int r, int c)
{
// ์ธ๋ฑ์ค
// ์ข
๋ฃ ์กฐ๊ฑด: ๊ฐ์ ๋ณ์ฌ๊ฐ ์๋๊ฑฐ๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ๊ณณ
if (r < 0 || r >= m || c < 0 || c >= n || board[r][c] != color || visited[r][c])
return;
cnt++;
visited[r][c] = true;
for (int i = 0; i < 4; i++)
dfs(r + dr[i], c + dc[i]);
}
int main()
{
// ์
๋ ฅ
cin >> n >> m;
board.assign(m, vector<char>(n));
visited.assign(m, vector<bool>(n, false));
for (int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
cin >> board[i][j];
}
}
// ์ฐ์ฐ
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (!visited[i][j]) {
color = board[i][j];
cnt = 0;
dfs(i, j);
if (color == 'W')
w.push_back(cnt * cnt);
else
b.push_back(cnt * cnt);
}
}
}
// ์ถ๋ ฅ
cout << accumulate(w.begin(), w.end(), 0) << ' ' << accumulate(b.begin(), b.end(), 0);
return 0;
}
2๏ธโฃ BFS
#include <iostream>
#include <vector>
#include <queue>
#include <numeric>
using namespace std;
typedef pair<int, int> pii;
int n, m, cnt;
char color;
vector<vector<char> > board;
vector<vector<bool> > visited;
vector<int> w, b;
int dr[4] = {-1, 1, 0, 0};
int dc[4] = {0, 0, -1, 1};
void bfs(int r, int c) {
queue<pii> q;
q.push(make_pair(r, c));
visited[r][c] = true;
while (!q.empty()) {
auto [r, c] = q.front();
cnt++;
q.pop();
for (int i = 0; i < 4; i++) {
int nr = r + dr[i];
int nc = c + dc[i];
if (nr < 0 || nr >= m || nc < 0 || nc >= n || board[nr][nc] != color || visited[nr][nc])
continue;
q.push(make_pair(r + dr[i], c + dc[i]));
visited[nr][nc] = true;
}
}
}
int main() {
// ์
๋ ฅ
cin >> n >> m;
board.assign(m, vector<char>(n));
visited.assign(m, vector<bool>(n, false));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> board[i][j];
}
}
// ์ฐ์ฐ
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (!visited[i][j]) {
color = board[i][j];
cnt = 0;
bfs(i, j);
if (color == 'W')
w.push_back(cnt * cnt);
else
b.push_back(cnt * cnt);
}
}
}
// ์ถ๋ ฅ
cout << accumulate(w.begin(), w.end(), 0) << ' ' << accumulate(b.begin(), b.end(), 0);
return 0;
}'๐ญ Problem Solving > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [BOJ][C++] ๋ฐฑ์ค 11559๋ฒ: Puyo Puyo (0) | 2025.05.18 |
|---|---|
| [BOJ][C++] ๋ฐฑ์ค 2606๋ฒ: ๋ฐ์ด๋ฌ์ค (0) | 2025.05.13 |
| [BOJ][C++] ๋ฐฑ์ค 1890๋ฒ: ์ ํ (0) | 2025.04.23 |
| [BOJ][C++] ๋ฐฑ์ค 2579๋ฒ: ๊ณ๋จ์ค๋ฅด๊ธฐ (0) | 2025.04.23 |
| [BOJ][C++] ๋ฐฑ์ค 1260๋ฒ: DFS์ BFS (0) | 2025.04.23 |