코테 공부
[DFS] 적록색약(백준 10026번, 자바)☆
DaEun_
2023. 1. 28. 01:12
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
boolean[] v;
Arrays.fill(v, false) : 모든 배열을 false로 초기화
import java.io.*;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
import java.util.StringTokenizer;
class Main
{
static int[] dx= {0,1,0,-1};
static int[] dy= {1,0,-1,0};
static boolean[][] visit;
static int N;
static char[][] arr;
public static void main(String args[]) throws Exception
{
int answer=0;
int answer2=0;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
N=Integer.parseInt(br.readLine());
arr=new char[N][N];
visit=new boolean[N][N];
for(int i=0;i<N;i++) {
String a=br.readLine();
for(int j=0;j<N;j++) {
arr[i][j]=a.charAt(j);
}
}
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
if(!visit[i][j]) {
answer++;
dfs(i,j);
}
}
}
for(boolean[] v:visit) {
Arrays.fill(v, false);
}
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
if(arr[i][j]=='R') arr[i][j]='G';
}
}
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
if(!visit[i][j]) {
dfs(i,j);
answer2++;
}
}
}
System.out.println(answer+" " +answer2);
}
static void dfs(int x, int y) {
visit[x][y]=true;
for(int i=0;i<4;i++) {
int nx=x+dx[i];
int ny=y+dy[i];
if(nx<0 || nx>=N || ny<0 || ny>=N || visit[nx][ny]) continue;
if(arr[x][y]==arr[nx][ny]) {
visit[nx][ny]=true;
dfs(nx,ny);
}
}
}
}