유블로그

BOJ 10026 적록색약 Java 본문

알고리즘

BOJ 10026 적록색약 Java

yujeong kang 2021. 6. 14. 23:19

BOJ 10026 적록색약 Java

 

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

 

10026번: 적록색약

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

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	static char[][] grid;
	static int N;
	public static void main(String[] args) throws Exception {
		new Main().solve();
	} // main
	
	void input() throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		grid = new char[N][N];
		for (int i = 0; i < N; i++) {
			grid[i] = br.readLine().toCharArray();
		}
	}
	
	void solve() throws Exception {
		input();
		
		visited = new boolean[N][N];
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if(visited[i][j]) continue;
				CNT1++;
				visited[i][j] = true;
				dfs(i, j, grid[i][j]);
			}
		}
		
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if(grid[i][j] == 'G') grid[i][j] = 'R';
			}
		}
		visited = new boolean[N][N];
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if(visited[i][j]) continue;
				CNT2++;
				visited[i][j] = true;
				dfs(i, j, grid[i][j]);
			}
		}
		
		System.out.println(CNT1 + " " + CNT2);
		
	} //solve
	
	static boolean[][] visited;
	static int CNT1, CNT2;
	static int[][] dir = new int[][] { {-1,0},{0,1},{1,0},{0,-1} };
	void dfs(int x, int y, char c) {
		
		for (int d = 0; d < 4; d++) {
			int nx = x + dir[d][0];
			int ny = y + dir[d][1];
			
			if(!isInBound(nx, ny) || visited[nx][ny]) continue;
			
			if(c != grid[nx][ny]) continue;
			visited[nx][ny] = true;
			dfs(nx, ny, grid[nx][ny]);
		}
		
	} // dfs
	
	boolean isInBound(int x, int y) {
		if(x < 0 || y < 0 || x >= N || y >= N) return false;
		return true;
	}
}

 

흠 쉬운 문제인듯한데

사실 위 코드 전 첫 코드가 실패 떴다

아직도 왜 틀린 지 알 수 없다

 

그래서 그냥 적록색약인 사람은 G를 R로 바꾸고

dfs 를 동일하게 돌렸다

 

dfs는 이중 for 문 돌면서

visited 하지 않은 곳에 들어가서 그 때마다 CNT 를 +1 해서 blob을 찾았다

'알고리즘' 카테고리의 다른 글

BOJ 2580 스도쿠 Java  (0) 2021.06.17
BOJ 13549 숨바꼭질 3 java  (0) 2021.06.14
BOJ 1629 곱셈 Java  (0) 2021.06.10
BOJ 1520 내리막길 Java  (0) 2021.06.10
BOJ 1022 소용돌이예쁘게출력하기 Java  (0) 2021.06.06