白駿10026号:赤緑色薬
質問する
題ショートカットキー>白駿10026号:赤緑色薬
に答える
まず赤い薬水ではない人のdfs探索を行い、それからRをGに変えて赤い薬水を行った人の探索を行いました!
題ショートカットキー>白駿10026号:赤緑色薬
に答える
まず赤い薬水ではない人のdfs探索を行い、それからRをGに変えて赤い薬水を行った人の探索を行いました!
#include<iostream>
#include<cstring>
#include<string>
#define MAX 101
using namespace std;
int N, ans=0;
char grid[MAX][MAX];
bool visit[MAX][MAX];
int dy[] = {-1, 1, 0, 0};
int dx[] = {0, 0, -1, 1};
void dfs(int y, int x){
visit[y][x] = true; // 방문 여부 update
for(int i=0; i<4; i++){
int ny = y+dy[i];
int nx = x+dx[i];
if(ny<0 || ny>=N || nx<0 || nx>=N) continue; // 범위를 벗어나는 경우
if(visit[ny][nx]) continue; // 이미 방문한 경우
if(grid[ny][nx]!=grid[y][x]) continue; // 연결된 색상이 같은 색상이 아닌 경우
dfs(ny, nx);
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
string str; cin >> N;
for(int i=0; i<N; i++){ // 문자열 -> char
cin >> str;
for(int j=0; j<N; j++) grid[i][j] = str[j];
}
// 적록 색약이 아닌 사람
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(!visit[i][j]) { // 방문하지 않은 경우
dfs(i, j); // 주변까지 탐색
ans++;
}
}
}
cout << ans << " ";
// 적록 색약인 사람
// 초기화
ans = 0;
memset(visit, false, sizeof(visit));
// red -> green
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(grid[i][j]=='R') grid[i][j] = 'G';
}
}
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(!visit[i][j]) { // 방문하지 않은 경우
dfs(i, j); // 주변까지 탐색
ans++;
}
}
}
cout << ans;
}
Reference
この問題について(白駿10026号:赤緑色薬), 我々は、より多くの情報をここで見つけました https://velog.io/@danbibibi/백준-10026번-적록색약-berr7uh7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol