https://www.acmicpc.net/problem/10026
๋ฌธ์
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค.
ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก), B(ํ๋) ์ค ํ๋๋ฅผ ์์น ํ ๊ทธ๋ฆผ์ด ์๋ค. ๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ๊ตฌ์ญ์ผ๋ก ๋๋์ด์ ธ ์๋๋ฐ, ๊ตฌ์ญ์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋, ๊ฐ์ ์์์ด ์ํ์ข์ฐ๋ก ์ธ์ ํด ์๋ ๊ฒฝ์ฐ์ ๋ ๊ธ์๋ ๊ฐ์ ๊ตฌ์ญ์ ์ํ๋ค. (์์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ์์์ด๋ผ ํ๋ค)
์๋ฅผ ๋ค์ด, ๊ทธ๋ฆผ์ด ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ ์ด 4๊ฐ์ด๋ค. (๋นจ๊ฐ 2, ํ๋ 1, ์ด๋ก 1) ํ์ง๋ง, ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ตฌ์ญ์ 3๊ฐ ๋ณผ ์ ์๋ค. (๋นจ๊ฐ-์ด๋ก 2, ํ๋ 1)
๊ทธ๋ฆผ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100)
๋์งธ ์ค๋ถํฐ N๊ฐ ์ค์๋ ๊ทธ๋ฆผ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ๊ฐ์์ ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
ํ์ด
[๐ Baaaaaarking/0x09๊ฐ - BFS] - [BOJ S1][C++] ๋ฐฑ์ค 1926๋ฒ : ๊ทธ๋ฆผ
๊ณผ ๊ฐ์ ๋ฌธ์ ๋ค
๋๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ณด๋ ์์ญ์ ๊ฐ์๋ฅผ ์ธ๊ณ ,
์ดํ ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๊ฒ๋ ๊ทธ๋ฆผ์ผ๋ก board ๋ฅผ ๋ฐ๊ฟ์ค๋ค
(์ด๋ vis ๋ฐฐ์ด ์ด๊ธฐํํ๋๊ฑธ ์์ง ๋ง์)
๊ทธ๋ฆฌ๊ณ ๊ฐ์๋ฐฉ๋ฒ์ผ๋ก ๋ค์ ๊ณ์ฐํด์ฃผ๋ฉด ๋
๋๋ ์์ญ ๊ฐฏ์ ์ธ๋ BFS ๋ฅผ ํจ์๋ก ๋ง๋ค์ด์ ๋ฐ๋ณตํด์คฌ๋น
// Authored by : seondal
// ํ์ด : https://whkakrkr.tistory.com/
// Co-authored by : -
//#include <bits/stdc++.h>
#include <iostream>
#include <queue>
using namespace std;
string board[101];
bool vis[101][101];
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
int n;
int notrg; // ์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ ๊ฐ์
int rg; // ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ ๊ฐ์
// ๊ทธ๋ฆผ ๊ฐ์ ๊ตฌํ๊ธฐ
int calculate(string board[]) {
int num = 0;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(vis[i][j]) continue;
num++;
char color = board[i][j];
queue<pair<int, int>> q;
q.push({i,j});
vis[i][j] = true;
while(!q.empty()){
pair<int, int> current = q.front();
q.pop();
for(int dir=0; dir<4; dir++){
int x = current.first + dx[dir];
int y = current.second + dy[dir];
if(x<0 || x>=n || y<0 || y>=n) continue;
if(board[x][y] != color || vis[x][y]) continue;
q.push({x,y});
vis[x][y] = true;
}
}
}
}
return num;
}
int main() {
// ์
๋ ฅ
cin >> n;
for(int i=0; i<n; i++) cin >> board[i];
// ์ ๋ก์์ฝ์ด ์๋ ์ฌ๋ ๊ณ์ฐ
notrg = calculate(board);
// ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๋ณด๋๋ก ๋ฐ๊พธ๊ธฐ
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
if(board[i][j] == 'R') board[i][j] = 'G';
// ๋ฐฉ๋ฌธ์ฌ๋ถ ์ด๊ธฐํ
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
vis[i][j] = false;
// ์ ๋ก์์ฝ์ธ ์ฌ๋ ๊ณ์ฐ
rg = calculate(board);
// ์ถ๋ ฅ
cout << notrg << " " << rg;
return 0;
}
/*
*/
'๐ Baaaaaarking > 0x09๊ฐ - BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ G5][C++] ๋ฐฑ์ค 7569๋ฒ: ํ ๋งํ (0) | 2022.03.10 |
---|---|
[BOJ G5][C++] ๋ฐฑ์ค 7576๋ฒ: ํ ๋งํ (0) | 2022.03.09 |
[BOJ S1][C++] ๋ฐฑ์ค 2178๋ฒ : ๋ฏธ๋ก ํ์ (0) | 2022.03.08 |
[BOJ S2][C++] ๋ฐฑ์ค 1012๋ฒ : ์ ๊ธฐ๋ ๋ฐฐ์ถ (0) | 2022.03.06 |
[BOJ S1][C++] ๋ฐฑ์ค 1926๋ฒ : ๊ทธ๋ฆผ (0) | 2022.03.06 |