1 λΆ„ μ†Œμš”

πŸ“ [G5_10026] 적둝색약

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    static int[] dx = {0,0,1,-1};
    static int[] dy = {1,-1,0,0,};
    static char[][] arr;
    static int N;
    static boolean[][] v;
    static int cnt;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        // 크기
        N = Integer.parseInt(br.readLine());

        // μž…λ ₯
        arr = new char[N+1][N+1];
        v = new boolean[N+1][N+1];
        for (int i = 0; i < N; i++) {
            String str = br.readLine();
            for (int j = 0; j < N; j++) {
                arr[i][j] = str.charAt(j);
            }
        }

        // κΈ°λ³Έ

        cnt = 0;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if(!v[i][j]){
                    dfs(i,j);
                    cnt++;
                }
            }
        }
        sb.append(cnt).append(" ");

        // 색맹

        cnt = 0;
        v = new boolean[N+1][N+1];

        for(int i=0; i<N; i++){
            for(int j=0; j<N; j++){
                if(arr[i][j] == 'G'){
                    arr[i][j] = 'R';
                }
            }
        }

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                if(!v[i][j]){
                    dfs(i,j);
                    cnt++;
                }
            }
        }
        sb.append(cnt);

        System.out.println(sb);
    }


    static void dfs(int x, int y) {
        v[x][y] = true;
        char num = arr[x][y];


        for (int z = 0; z < 4; z++) {
            int nx = x + dx[z];
            int ny = y + dy[z];

            if (nx < 0 || ny < 0 || nx > N || ny > N) {
                continue;
            }
            else if (!v[nx][ny] && arr[nx][ny] == num) {
                dfs(nx, ny);
            }
        }
    }
}

πŸ€” λ‚˜μ˜ 생각

dfs와 λ°©ν–₯탐색을 ν•©ν•˜μ—¬ κ΅¬ν˜„ν•˜μ˜€λ‹€.
λ¨Όμ € 적둝색약이 μ•„λ‹Œ μ‚¬λžŒμ΄ 봀을 λ•Œμ˜ κ΅¬μ—­μ˜ κ°œμˆ˜λŠ” 처음 μœ„μΉ˜ λΆ€ν„° 4λ°©ν–₯ 탐색을 ν•˜λ©° dfs() μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜λ©΄ ꡬ역듀이 λ‚˜μ˜¨λ‹€.
κ·Έ ꡬ역을 μΉ΄μš΄νŒ… ν•΄μ£Όκ³  전체 μΉ΄μš΄νŒ…μ„ ꡬ해주면 λœλ‹€.
λ‹€μŒ 적둝색약이 μžˆλŠ” μ‚¬λžŒμ΄ 봀을 λ•ŒλŠ” Gλ₯Ό R둜 λ°”κΏ”μ£Όκ³  λ˜‘κ°™μ€ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜λ©΄ λœλ‹€.
dfs와 λ°©ν–₯탐색을 κ΅¬ν˜„ν•  쀄 μ•ˆλ‹€λ©΄ 어렡지 μ•Šμ€ λ¬Έμ œμ˜€λ‹€.