카테고리 없음
[백준/Java] 적록색약 10026
해버니
2023. 12. 22. 15:49
반응형
문제
https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
풀이
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static String[][] paint;
public static boolean[][] check;
public static int count;
public static int[] dx = {0, -1, 0, 1};
public static int[] dy = {-1, 0, 1, 0};
/**
* 적록색약이 아닌 경우
*
* @param x
* @param y
* @param color
*/
public void notDyschromatopsia(int x, int y, String color) {
check[x][y] = true;
for (int i = 0; i < dx.length; i++) {
int cx = x + dx[i];
int cy = y + dy[i];
if (cx >= 0 && cy >= 0 && cx < paint.length && cy < paint.length) {
if (color.equals(paint[cx][cy]) && check[cx][cy] == false) {
notDyschromatopsia(cx, cy, paint[cx][cy]);
}
}
}
}
/**
* 적록색약일 경우
*
* @param x
* @param y
* @param color
*/
public void dyschromatopsia(int x, int y, String color) {
check[x][y] = true;
for (int i = 0; i < dx.length; i++) {
int cx = x + dx[i];
int cy = y + dy[i];
if (cx >= 0 && cy >= 0 && cx < paint.length && cy < paint.length) {
if ((color.equals(paint[cx][cy]) || (color.equals("G") && paint[cx][cy].equals("R"))
|| (color.equals("R") && paint[cx][cy].equals("G"))) && check[cx][cy] == false) {
dyschromatopsia(cx, cy, paint[cx][cy]);
}
}
}
}
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Main mm = new Main();
int n = Integer.parseInt(br.readLine());
paint = new String[n][n];
check = new boolean[n][n];
// 입력 받기
for (int i = 0; i < paint.length; i++) {
String inputStr = br.readLine();
for (int j = 0; j < paint[0].length; j++) {
paint[i][j] = String.valueOf(inputStr.charAt(j));
}
}
// false 초기화
for (int i = 0; i < check.length; i++) {
for (int j = 0; j < check[0].length; j++) {
check[i][j] = false;
}
}
count = 0; // count 초기화
for (int i = 0; i < paint.length; i++) {
for (int j = 0; j < paint[0].length; j++) {
if (check[i][j] == false) {
count++;
// System.out.println("i :" + i + " j :" + j);
mm.notDyschromatopsia(i, j, paint[i][j]);
}
}
}
bw.write(String.valueOf(count) + " ");
count = 0; // count 초기화
// false 초기화
for (int i = 0; i < check.length; i++) {
for (int j = 0; j < check[0].length; j++) {
check[i][j] = false;
}
}
for (int i = 0; i < paint.length; i++) {
for (int j = 0; j < paint[0].length; j++) {
if (check[i][j] == false) {
count++;
mm.dyschromatopsia(i, j, paint[i][j]);
}
}
}
bw.write(String.valueOf(count));
bw.flush();
bw.close();
}
}
정답
반응형