반응형
728x170
어렵지 않았지만 입력이 귀찮았다.
https://www.acmicpc.net/problem/10026
#맞는 풀이
#include <iostream>
#include <string>
#include <queue>
#define X first
#define Y second
#define SIZE 100
using namespace std;
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
int rg[SIZE][SIZE]; //적녹 색약 visit
int norm[SIZE][SIZE]; // 보통 visit
int n; // 행,열
int normCnt, rgCnt; // 답
string arr[SIZE]; //입력
int main(){
cin >> n;
//노드입력
for(int i = 0; i<n; i++){
cin >> arr[i];
}
queue <pair<int,int>> q;
//보통
for(int i = 0; i<n; i++){
for(int j = 0; j<n; j++){
if(norm[i][j] != 0)continue; //방문했으면 다음노드
char stand = arr[i][j]; //해당 색 저장
normCnt++; //해당 노드에 대한 구분영역 + 1
norm[i][j] = 1; //방문
q.push({i,j}); //해당 위치 푸시
//해당 영역 탐색
while(!q.empty()){
auto cur = q.front();
q.pop();
for(int dir = 0; dir<4; dir++){
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
//범위
if(nx<0 || nx>=n || ny<0 || ny>=n)continue;
//방문한 같은 색노드거나 다른 색이면 방문하지 않음
if(arr[nx][ny] != stand || norm[nx][ny] != 0)continue;
q.push({nx,ny});
norm[nx][ny] = 1;
}
}
}
}
//적녹
for(int i = 0; i<n; i++){
for(int j = 0; j<n; j++){
bool rgCheck = false;
if(rg[i][j] != 0)continue; //방문했으면 다음노드
char stand = arr[i][j]; //해당 색 저장
if(stand == 'R' || stand == 'G'){
rgCheck = true;
}
rgCnt++; //해당 노드에 대한 구분영역 + 1
rg[i][j] = 1; //방문
q.push({i,j}); //해당 위치 푸시
//해당 영역 탐색
while(!q.empty()){
auto cur = q.front();
q.pop();
for(int dir = 0; dir<4; dir++){
int nx = cur.X + dx[dir];
int ny = cur.Y + dy[dir];
//범위
if(nx<0 || nx>=n || ny<0 || ny>=n)continue;
if(rg[nx][ny] != 0)continue;
//현재 r,g를 조사하고 있다면
if(rgCheck){
//B는 방문을 하면 안되고 방문을 했던 노드도 방문하면 안됨.
if(arr[nx][ny] == 'B')continue;
q.push({nx,ny});
rg[nx][ny] = 1;
}
//현재 r,g를 조사하지 않는다면 -> B라면
//B만 조사
else{
//B가 아닌 노드에 방문을 하면 안됨
if(arr[nx][ny] != stand)continue;
q.push({nx,ny});
rg[nx][ny] = 1;
}
}
}
}
}
//답
cout <<normCnt <<" " << rgCnt;
return 0;
}
까다로운것은 R,G를 같이 봐야한다는 것?
그것만 예외처리 해주면 된다.
728x90
반응형
그리드형
'문제풀이(Problem Solving)' 카테고리의 다른 글
백준, BOJ, 2573번, 빙산 : C++ [CPP] (0) | 2021.11.29 |
---|---|
백준, BOJ, 3055번, 탈출 : C++ [CPP] (0) | 2021.11.29 |
백준, BOJ, 1987번, 알파벳 : C++ [CPP] *** (0) | 2021.11.27 |
백준, BOJ, 2468번, 안전 영역 : C++ [CPP] *** (0) | 2021.11.27 |
프로그래머스, 보석쇼핑 : C++ [CPP] (0) | 2021.11.21 |