-
[백준]10026: 적록색약 - JAVA문제풀이/백준 2021. 2. 14. 18:03
[백준]10026: 적록색약
풀이
탐색 문제로 dfs, bfs로 둘다 풀어도 될 듯하다. 적록색약이 아닌 사람이 봤을 때의 구역의 수는 일반적인 dfs와 똑같고, 적록색약인 사람의 구역의 수를 구할 때는 R, G인 값을 같다고 생각하고 체크해주었다.
이정도는 이제 어렵지 않다!
코드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980import java.util.*;public class Main {static int[] dx = {0, -1, 0, 1};static int[] dy = {1, 0, -1, 0};static int n;static char board[][];static boolean normalvisited[][], redgreenvisited[][];static int normalCount = 0, redgreenCount = 0;public static void main(String[] args) {Scanner scan = new Scanner(System.in);n = scan.nextInt();scan.nextLine();board = new char[n][n];for(int i = 0; i < n; i++) {String str = scan.nextLine();for(int j = 0; j < n; j++) {board[i][j] = str.charAt(j);}}normalvisited = new boolean[n][n];redgreenvisited = new boolean[n][n];for(int i = 0; i < n; i++) {for(int j = 0; j < n; j++) {if(normalvisited[i][j] == false) {dfs(i, j);normalCount++;}if(redgreenvisited[i][j] == false) {redgreendfs(i, j);redgreenCount++;}}}System.out.print(normalCount + " " + redgreenCount);}public static void dfs(int x, int y) {normalvisited[x][y] = true;for(int i = 0; i < 4; i++) {int nx = x + dx[i];int ny = y + dy[i];if(nx >= 0 && ny >= 0 && nx < n && ny < n) {if(normalvisited[nx][ny] == false && board[nx][ny] == board[x][y]) {normalvisited[nx][ny] = true;dfs(nx, ny);}}}}public static void redgreendfs(int x, int y) {redgreenvisited[x][y] = true;for(int i = 0; i < 4; i++) {int nx = x + dx[i];int ny = y + dy[i];if(nx >= 0 && ny >= 0 && nx < n && ny < n) {if(redgreenvisited[nx][ny] == false) {if((board[x][y] == 'R' || board[x][y] == 'G') && (board[nx][ny] == 'R' || board[nx][ny] == 'G')) {redgreenvisited[nx][ny] = true;redgreendfs(nx, ny);}else if(board[x][y] == board[nx][ny]) {redgreenvisited[nx][ny] = true;redgreendfs(nx, ny);}}}}}}cs '문제풀이 > 백준' 카테고리의 다른 글
[백준]1922: 네트워크 연결 (0) 2021.02.16 [백준]1766: 문제집 - JAVA (0) 2021.02.15 [백준]1939: 중량제한 - JAVA (0) 2021.02.14 [백준]17136: 색종이 붙이기 - JAVA (0) 2021.02.13 [백준]2225: 합분해 - JAVA (0) 2021.02.12