[BJ10026] 적록색약
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/백준 알고리즘

[BJ10026] 적록색약

 백준 - 적록색약 

문제 링크

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

 

10026번: 적록색약

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

www.acmicpc.net

 

문제 입출력

5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
4 3

 

문제 풀이

package problem.BJ;


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


public class BJ10026_적록색약 {
	static int ans, ansB, N;
	static char[][] map;
	static boolean[][] visit;

	// 상하좌우
	static int[] dy = { -1, 1, 0, 0 };
	static int[] dx = { 0, 0, -1, 1 };


	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		N = Integer.parseInt(br.readLine());
		map = new char[N][N];

		for (int i = 0; i < N; i++) map[i] = br.readLine().toCharArray();

		// 탐색
		// 적록색약이 아닌 사람
		visit = new boolean[N][N];
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if (!visit[i][j]) {
					dfs(i, j);
					ans++;
				}

			}

		}

		// 적록색약인 사람
		for (int i = 0; i < N; i++)
		    for (int j = 0; j < N; j++) if (map[i][j] == 'G') map[i][j] = 'R';

		visit = new boolean[N][N];
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) if (!visit[i][j]) {
				dfs(i, j);
				ansB++;
			}
		}

		System.out.println(ans + " " + ansB);

	} // end main


	private static void dfs(int y, int x) {
		for (int d = 0; d < 4; d++) {
			int ny = y + dy[d];
			int nx = x + dx[d];

			if (ny < 0 || ny >= N || nx < 0 || nx >= N) continue;
			if (visit[ny][nx]) continue;
			if (map[ny][nx] != map[y][x]) continue;

			visit[ny][nx] = true;
			dfs(ny, nx);
		}

	} // end dfs

}
  • 적록색약인 사람은 R과 G 을 혼동한다.
  • 따라서 적록색약인 사람의 시야를 카운팅 하기 전에 G에 속하는 것들을 R로 바꿔준다.
  • 그런 다음 dfs 를 돌린다.

 

 

 

 

 

 

 

 

 

# 백준 적록색약 java


 

728x90

'✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺 > 백준 알고리즘' 카테고리의 다른 글

[BJ16236] 아기 상어  (0) 2022.10.11
[BJ3055] 탈출  (1) 2022.10.10
[BJ13023] ABCDE  (0) 2022.10.02
[BJ9019] DSLR  (0) 2022.09.27
[BJ2583] 영역 구하기  (0) 2022.09.21