약간 새로운 패턴의 문제였다.
그냥 약간의 노가다(?) 문제
일반인의 덩어리를 세는 부분은 R,G,B를 모두 나누어 개수를 세면 되지만
적록색약의 덩어리를 세는 부분은 (R,G), B를 나누어 개수를 세면 끝이다
쉽죠?
□ 소스코드
#include <bits/stdc++.h>
using namespace std;
vector<vector<char>> input10026(101,vector<char>(101,0));
vector<vector<bool>> check10026(101,vector<bool>(101,false));
vector<vector<bool>> checkNotRG10026(101,vector<bool>(101,false));
bool dfsBlue10026(int N, int x, int y){
if(x<1 || y<1 || x>N || y>N)
return false;
if(input10026[x][y] == 'B' && !check10026[x][y] ){
check10026[x][y] = true;
dfsBlue10026(N, x+1, y);
dfsBlue10026(N, x-1, y);
dfsBlue10026(N, x, y-1);
dfsBlue10026(N, x, y+1);
return true;
}
return false;
}
bool dfsGreenRed10026(int N, int x, int y){
if(x<1 || y<1 || x>N || y>N)
return false;
if((input10026[x][y] == 'G' || input10026[x][y] == 'R') && !check10026[x][y]){
check10026[x][y] = true;
dfsGreenRed10026(N, x+1, y);
dfsGreenRed10026(N, x-1, y);
dfsGreenRed10026(N, x, y-1);
dfsGreenRed10026(N, x, y+1);
return true;
}
return false;
}
bool dfsGreen10026(int N, int x, int y){
if(x<1 || y<1 || x>N || y>N)
return false;
if(input10026[x][y] == 'G' && !checkNotRG10026[x][y] ){
checkNotRG10026[x][y] = true;
dfsGreen10026(N, x+1, y);
dfsGreen10026(N, x-1, y);
dfsGreen10026(N, x, y-1);
dfsGreen10026(N, x, y+1);
return true;
}
return false;
}
bool dfsRed10026(int N, int x, int y){
if(x<1 || y<1 || x>N || y>N)
return false;
if(input10026[x][y] == 'R' && !checkNotRG10026[x][y] ){
checkNotRG10026[x][y] = true;
dfsRed10026(N, x+1, y);
dfsRed10026(N, x-1, y);
dfsRed10026(N, x, y-1);
dfsRed10026(N, x, y+1);
return true;
}
return false;
}
void green10026(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N; cin>>N;
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
char a; cin>>a;
input10026[i][j] = a;
}
}
int notRGMedicine = 0;
int rgMedicine = 0;
int blueColor = 0;
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
if(dfsBlue10026(N, i, j)){
rgMedicine++;
blueColor++;
}
if(dfsGreenRed10026(N, i, j))
rgMedicine++;
if(dfsRed10026(N, i, j))
notRGMedicine++;
if(dfsGreen10026(N, i, j))
notRGMedicine++;
}
}
cout<<notRGMedicine + blueColor <<" "<<rgMedicine<<"\n";
}
'알고리즘 > DFS & BFS' 카테고리의 다른 글
[백준] 2468 안전영역 (0) | 2023.05.07 |
---|---|
[백준] 4963 섬의 개수 (0) | 2023.05.07 |
[백준] 11724 연결 요소의 개수 (0) | 2023.05.07 |
백준[2206] 벽 부수고 이동하기 (0) | 2023.02.05 |
백준[16928] 뱀과 사다리 게임 (0) | 2023.01.30 |