Dev.baelanche

[백준 10026] 적록색약 본문

Data Structure & Algorithm/PS - JAVA

[백준 10026] 적록색약

baelanche 2019. 4. 9. 19:57
반응형

 

탐색을 여러번 할뿐 컴포넌트 개수를 세는건 여타 기본 DFS 문제와 똑같다.

필자는 R, G, B 탐색 후 R, G 는 같은 값으로 배열을 채워 넣어 풀었다.

 

 

 

public class Main {

    static int n;
    static String a[][];
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        n = sc.nextInt();
        a = new String[n][n];
        
        for(int i=0; i<n; i++) {
            String rgb = sc.next();
            for(int j=0; j<n; j++) {
                a[i][j] = String.valueOf(rgb.charAt(j));
            }
        }
        
        int p1 = 0;
        for(int i=0; i<n; i++) {
            for(int j=0; j<n; j++) {
                if(a[i][j].equals("R")) {
                    dfs(i, j, "R");
                    p1++;
                } else if(a[i][j].equals("G")) {
                    dfs(i, j, "G");
                    p1++;
                } else if(a[i][j].equals("B")) {
                    dfs(i, j, "B");
                    p1++;
                }
            }
        }
        
        int p2 = 0;
        for(int i=0; i<n; i++) {
            for(int j=0; j<n; j++) {
                if(a[i][j].equals("0")) {
                    dfs(i, j, "0");
                    p2++;
                } else if(a[i][j].equals("1")) {
                    dfs(i, j, "1");
                    p2++;
                }
            }
        }
        System.out.println(p1 + " " + p2);
        sc.close();
    }
    
    public static void dfs(int x, int y, String rgb) {
        int mx[] = {0, 1, 0, -1};
        int my[] = {1, 0, -1, 0};
        for(int i=0; i<4; i++) {
            int nx = x + mx[i];
            int ny = y + my[i];
            if(0 <= nx && nx < n && 0 <= ny && ny < n) {
                if(rgb.equals("R")) {
                    a[x][y] = "0";
                    if(!a[nx][ny].equals("R") && i < 3) continue;
                    if(!a[nx][ny].equals("R") && i == 3) return;
                } else if(rgb.equals("G")) {
                    a[x][y] = "0";
                    if(!a[nx][ny].equals("G") && i < 3) continue;
                    if(!a[nx][ny].equals("G") && i == 3) return;
                } else if(rgb.equals("B")) {
                    a[x][y] = "1";
                    if(!a[nx][ny].equals("B") && i < 3) continue;
                    if(!a[nx][ny].equals("B") && i == 3) return;
                } else if(rgb.equals("0")) {
                    a[x][y] = "-1";
                    if(!a[nx][ny].equals("0") && i < 3) continue;
                    if(!a[nx][ny].equals("0") && i == 3) return;
                } else if(rgb.equals("1")) {
                    a[x][y] = "-1";
                    if(!a[nx][ny].equals("1") && i < 3) continue;
                    if(!a[nx][ny].equals("1") && i == 3) return;
                }
                dfs(nx, ny, rgb);
            }
        }
    }
}

 

 

 

반응형

'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글

[백준 2468] 안전 영역  (0) 2019.04.10
[백준 11403] 경로 찾기  (0) 2019.04.10
[백준 2583] 영역 구하기  (0) 2019.04.09
[백준 2667] 단지번호붙이기  (0) 2019.04.09
[백준 1743] 음식물 피하기  (0) 2019.04.09
Comments