본문 바로가기

코딩테스트(백준)

[백준] 10026 : 적록색약 -JAVA(자바) - 사좋배 공유


import java.util.Scanner;

public class Main {

	static int size;
	static char arr[][];
	static boolean visit[][];
	static int result1;
	static int result2;
	static int dx[]= {-1,0,1,0};
	static int dy[]= {0,1,0,-1};
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		size= sc.nextInt();
		sc.nextLine();
		arr= new char[size][size];
		visit=new boolean[size][size];
		for(int i=0;i<size;i++) {
			String s = sc.nextLine();
			for(int j=0;j<size;j++) {
				arr[i][j]=s.charAt(j);
			}
		}
		for(int i=0;i<size;i++) {
			for(int j=0;j<size;j++) {
				if(visit[i][j]==false) {
					result1++;
					char temp=arr[i][j];
					DFS(i,j,temp);
				}
			}
		}
		for(int i=0;i<size;i++) {
			for(int j=0;j<size;j++) {
				if(arr[i][j]=='G') {
					arr[i][j]='R';
				}
			}
		}
		checkVisit();
		for(int i=0;i<size;i++) {
			for(int j=0;j<size;j++) {
				if(visit[i][j]==false) {
					result2++;
					char temp= arr[i][j];
					DFS(i,j,temp);
				}
			}
		}
		System.out.print(result1+" "+result2);

	}
	private static void checkVisit() {
		for(int i=0;i<size;i++) {
			for(int j=0;j<size;j++) {
				visit[i][j]=false;
			}
		}

	}
	private static void DFS(int x, int y,char temp) {
		visit[x][y]=true;
		for(int i=0;i<4;i++) {
			int rx= x+dx[i];
			int ry=y+dy[i];
			if(rx<0||ry<0||ry>=size||rx>=size) {
				continue;
			}if(visit[rx][ry]==true) {
				continue;
			}if(arr[rx][ry]!=temp) {
				continue;
			}if(arr[rx][ry]==temp&&visit[rx][ry]==false) {
				visit[rx][ry]=true;
				DFS(rx,ry,temp);
			}
		}
		return;
	}
}