코딩테스트/백준

[Java] 백준 10026 : 적록색약

플래시🦥 2023. 2. 24.
반응형

 

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

10026번: 적록색약

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

www.acmicpc.net


적록색약이 봤을 때와 아닌 사람이 봤을 때 각각 이렇게 보인다. 

왼: 적록색약 /우 : 적록색약 아닌사람

 

적록색약이 아닐 때 너비우선 탐색을 우선 해주고, 완료한 다음 입력받은 배열의 G값을 R값으로 바꾸어 주고 너비우선 탐색을 진행하면 된다.


import java.io.*;
import java.util.*;

public class Main {

	static int num;
	static String[][] arr;
	static boolean[][] visit;
	static int[] dx = { 0, 0, 1, -1 };
	static int[] dy = { 1, -1, 0, 0 };

	static class point {
		int x, y;

		point(int x, int y) {
			this.x = x;
			this.y = y;
		}
	}// class point

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		num = Integer.parseInt(br.readLine()); // N*N그리드
		arr = new String[num][num];
		int cnta = 0, cntb = 0;

		for (int i = 0; i < num; i++) {
			arr[i] = br.readLine().split("");
		}

		visit = new boolean[num][num];
		for (int i = 0; i < num; i++) {
			for (int j = 0; j < num; j++) {
				if (!visit[i][j]) {
					bfs(i, j);
					cnta++;
				}
			}
		}

		for (int i = 0; i < num; i++) {
			for (int j = 0; j < num; j++) {
				if(arr[i][j].equals("G"))
					arr[i][j]="R";
			}
		}

		visit = new boolean[num][num];
		for (int i = 0; i < num; i++) {
			for (int j = 0; j < num; j++) {
				if (!visit[i][j]) {
					bfs(i, j);
					cntb++;
				}

			}
		}
		System.out.println(cnta+" "+cntb);

	}// main()

	static void bfs(int x, int y) {
		Queue<point> qu = new LinkedList<>();

		visit[x][y] = true;
		qu.add(new point(x, y));

		while (!qu.isEmpty()) {
			point tmp = qu.poll();
			int tx = tmp.x;
			int ty = tmp.y;

			for (int i = 0; i < 4; i++) {
				int nx = tx + dx[i];
				int ny = ty + dy[i];

				if (nx >= 0 && ny >= 0 && nx < num && ny < num) {
					if (!visit[nx][ny] && arr[nx][ny].equals(arr[tx][ty])) {
						qu.add(new point(nx, ny));
						visit[nx][ny] = true;
					}
				}

			}

		}
	}// bfs()

}// class Main

 

728x90
반응형

댓글