본문 바로가기
백준/클래스

[5] [Class 3] - 백준 10026 적록색약

by Riverandeye 2021. 1. 22.

www.acmicpc.net/problem/10026

 

10026번: 적록색약

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)

www.acmicpc.net

 

정말 간단하게 dfs로 풀었다.

맞왜틀 한걸 봤더니 인덱스 범위 비교할때 N을 안쓰고 100을.. 

 

// 10026 https://www.acmicpc.net/problem/10026
// dfs

#include <bits/stdc++.h>

using namespace std;

char map_[100][100];
bool jrsy[100][100];
bool notjrsy[100][100];
int N;

int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};

void dfs(int x, int y, int isJRSY){
  if(isJRSY){
    jrsy[x][y] = true;

    for(int i = 0 ; i < 4 ; i++){
      int nowx = x + dx[i];
      int nowy = y + dy[i];

      if(nowx < 0 || nowx >= N || nowy < 0 || nowy >= N) continue;
      if(jrsy[nowx][nowy]) continue;
      if(map_[x][y] == 'B'){
        if(map_[nowx][nowy] != 'B') continue;
      }
      else {
        if(map_[nowx][nowy] == 'B') continue;
      }
      dfs(nowx, nowy, isJRSY);
    }
  }

  else {
    notjrsy[x][y] = true;

    for(int i = 0 ; i < 4 ; i++){
      int nowx = x + dx[i];
      int nowy = y + dy[i];

      if(nowx < 0 || nowx >= N || nowy < 0 || nowy >= N) continue;
      if(notjrsy[nowx][nowy]) continue;
      if(map_[x][y] != map_[nowx][nowy]) continue;
      dfs(nowx, nowy, isJRSY);
    }
  }
}

int main(){
  ios_base :: sync_with_stdio(false); 
  cin.tie(NULL);

  cin >> N;

  for(int i = 0; i < N ; i++){
    string a; 
    cin >> a;
    for(int j = 0; j < N ; j++){
      map_[i][j] = a[j];
    }
  }
  
  int jrsy_res = 0;
  int not_jrsy_res = 0;

  for(int i = 0 ; i < N ; i++){
    for(int j = 0 ; j < N ; j++){
      if(jrsy[i][j]) continue;

      dfs(i,j,true);
      jrsy_res += 1;
    }
  }

  for(int i = 0 ; i < N ; i++){
    for(int j = 0 ; j < N ; j++){
      if(notjrsy[i][j]) continue;

      dfs(i,j,false);
      not_jrsy_res += 1;
    }
  }

  cout << not_jrsy_res << ' ' << jrsy_res << '\n';

  return 0;
}

댓글