๐ป
[๋ฐฑ์ค] DFS์BFS - 10026. ์ ๋ก์์ฝ ๋ณธ๋ฌธ
[๋ฐฑ์ค] DFS์BFS - 10026. ์ ๋ก์์ฝ
๋ํจ๋ 2020. 2. 28. 14:48๋ฌธ์
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค.
ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก), B(ํ๋) ์ค ํ๋๋ฅผ ์์น ํ ๊ทธ๋ฆผ์ด ์๋ค. ๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ๊ตฌ์ญ์ผ๋ก ๋๋์ด์ ธ ์๋๋ฐ, ๊ตฌ์ญ์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋, ๊ฐ์ ์์์ด ์ํ์ข์ฐ๋ก ์ธ์ ํด ์๋ ๊ฒฝ์ฐ์ ๋ ๊ธ์๋ ๊ฐ์ ๊ตฌ์ญ์ ์ํ๋ค. (์์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ์์์ด๋ผ ํ๋ค)
์๋ฅผ ๋ค์ด, ๊ทธ๋ฆผ์ด ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์
-----------------------------------
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
-----------------------------------
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ ์ด 4๊ฐ์ด๋ค. (๋นจ๊ฐ 2, ํ๋ 1, ์ด๋ก 1) ํ์ง๋ง, ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ตฌ์ญ์ 3๊ฐ ๋ณผ ์ ์๋ค. (๋นจ๊ฐ-์ด๋ก 2, ํ๋ 1)
๊ทธ๋ฆผ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100)
๋์งธ ์ค๋ถํฐ N๊ฐ ์ค์๋ ๊ทธ๋ฆผ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ๊ฐ์์ ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ1
5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
์์ ์ถ๋ ฅ1
4 3
์๊ฐ
R, G, B๊ฐ์ ๊ฐ๊ฐ 1,2,3์ผ๋ก ํด์ ์ ๋ ฅ์์ map๋ฐฐ์ด์ ๊ฐ์ ๋ฃ์ด์ฃผ์๋ค. ์ ์ถํ๊ณ ๋ณด๋ map์ charํ์ผ๋ก ๋๊ณ ์ ๋ ฅ๊ฐ R,G,B๊ทธ๋๋ก ํ์์ด๋ ๋๋ ๊ฒ์ด์๋๋ฐ ๊ทธ๋ฌ๋ค.
nomal, abnomal ๋ก ๋ณ์๋ฅผ ๋๊ณ ์ ์์ธ๊ณผ ์ ๋ก์์ฝ์ธ ์ฌ๋์ผ ๋ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๊ณ ์ ๋ก์์ฝ์ ๊ฒฝ์ฐ ์ด๋ก์ผ๋์ ๋นจ๊ฐ๊ณผ ๊ฐ์ ๊ฐ์ผ๋ก map๊ฐ์ ๋ฐ๊ฟ์คฌ๋ค. memset์ ์ ์์ธ์ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๊ณ ๋์ ๊ทธ ์ ์ visited๋ฐฐ์ด์ ์ด๊ธฐํ ํ๊ธฐ ์ํด ์ฌ์ฉํ์๋ค.
์์ฑํ ์ฝ๋
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#define MAX 100
using namespace std;
int n;
char c; // R, G, B ์
๋ ฅ๋ฐ๊ธฐ์ํด
int map[MAX][MAX];
bool visited[MAX][MAX];
// ์,ํ,์ข,์ฐ
int dx[] = { -1, 1, 0, 0 };
int dy[] = { 0, 0, -1, 1 };
int nomal, abnomal = 0;
void dfs(int x, int y){
visited[x][y] = true;
int val = map[x][y];
for(int i=0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || ny < 0 || nx >=n || ny >= n)
continue;
if(map[nx][ny] == val && !visited[nx][ny]){
dfs(nx, ny);
}
}
}
int main(int argc, const char * argv[]) {
// insert code here...
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> c;
if(c == 'R'){
map[i][j]=1; // ๋นจ๊ฐ
}else if(c == 'B'){
map[i][j]=2; // ํ๋
}else{
map[i][j]=3; // ์ด๋ก
}
}
}
// ์ ์ ์ฌ๋์ผ ๋
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(!visited[i][j]){
nomal++;
dfs(i,j);
}
}
}
// ์ ๋ก ์์ฝ์ธ ์ฌ๋
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(map[i][j] == 3){ // ์ด๋ก์ด๋ฉด ๋นจ๊ฐ์ผ๋ก ๋ฐ๊ฟ์คฌ๋ค
map[i][j] = 1;
}
}
}
memset(visited, 0, sizeof(visited));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(!visited[i][j]){
abnomal++;
dfs(i,j);
}
}
}
cout << nomal << ' ' << abnomal << '\n';
return 0;
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] DFS์BFS - 11403. ๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2020.03.01 |
---|---|
[๋ฐฑ์ค] DFS์BFS - 1260.DFS์ BFS (0) | 2020.03.01 |
[๋ฐฑ์ค] ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ - 1120. ๋ฌธ์์ด (0) | 2020.02.28 |
[๋ฐฑ์ค] ๊ทธ๋ฆฌ๋์๊ณ ๋ฆฌ์ฆ - 12866. ํ๋ฒํ ๋ฐฐ๋ญ (0) | 2020.02.27 |
[๋ฐฑ์ค] ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ - 1083. ์ํธ (0) | 2020.02.27 |