-
[백준 - 10026번] 적록색약 - Java //Wello Horld//Algorithm/BOJ(Baekjoon Online Judge) 2019. 12. 9. 13:21
이번에는 BOJ의 10026번 문제 "적록색약" 을 풀어보도록 하자
NXN의 크기만큼 빨강, 초록, 파랑 중 하나를 색칠한 그림이 주어지고, 해당그림이 몇개의 구역으로 나뉘어져 있는지 적록색약이 아닌 사람이 봤을 경우와 적록색약인 사람이 봤을 경우에 대해 구하면 되는 문제이다.
성공한 코드는 아래와 같다
import java.io.*; import java.util.*; public class sample { static int ansRGB = 0; static int ansRB = 0; static int N; static char[][] RGB; static char[][] RB; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); N = Integer.parseInt(br.readLine()); RGB = new char[N][N]; RB = new char[N][N]; for(int i = 0; i < N; i++){ String input = br.readLine(); for(int j = 0; j < N; j++){ RGB[i][j] = input.charAt(j); if(input.charAt(j) == 'G') RB[i][j] = 'R'; else RB[i][j] = input.charAt(j); } } for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ if(RGB[i][j] != '.') { ansRGB++; calcRGB(i, j, RGB[i][j]); } } } for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ if(RB[i][j] != '.') { ansRB++; calcRB(i, j, RB[i][j]); } } } bw.write(ansRGB + " " + ansRB + "\n"); bw.flush(); br.close(); bw.close(); } public static void calcRGB(int n, int m, char c){ if(n < 0 || n >= N || m < 0 || m >= N || RGB[n][m] == '.') return; if((c == 'R' && RGB[n][m] == 'R') || c == 'B' && RGB[n][m] == 'B' || c == 'G' && RGB[n][m] == 'G'){ RGB[n][m] = '.'; calcRGB(n, m - 1, c); calcRGB(n, m + 1, c); calcRGB(n - 1, m, c); calcRGB(n + 1, m, c); } } public static void calcRB(int n, int m, char c){ if(n < 0 || n >= N || m < 0 || m >= N || RB[n][m] == '.') return; if((c == 'R' && RB[n][m] == 'R') || c == 'B' && RB[n][m] == 'B' || c == 'G' && RB[n][m] == 'G'){ RB[n][m] = '.'; calcRB(n, m - 1, c); calcRB(n, m + 1, c); calcRB(n - 1, m, c); calcRB(n + 1, m, c); } } }
문제 : https://www.acmicpc.net/problem/10026
혹시 코드에 이상한 부분이나 틀린 부분이 있던지, 이해가 안가는 부분이 있다면 댓글로 알려주세요.
'Algorithm > BOJ(Baekjoon Online Judge)' 카테고리의 다른 글
[백준 - 15784번] 질투진서 - Java //Wello Horld// (0) 2019.12.10 [백준 - 10214번] Baseball - Java //Wello Horld// (0) 2019.12.09 [백준 - 16765번] Teamwork - Java //Wello Horld// (0) 2019.12.09 [백준 - 2897번] 몬스터 트럭 - Java //Wello Horld// (0) 2019.08.14 [백준 - 3059번] 등장하지 않는 문자의 합 - Java //Wello Horld// (0) 2019.08.14