ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준]10026. 적록색약 (Java)
    알고리즘/백준 2021. 9. 3. 15:03

    💡 문제 분석

    /**
     *  적록 색약인 사람이 봤을 때는 R과 G를 같은 값으로 생각해야 함.
     *  모든 칸을 순회하면서 그래프 탐색으로 컴포넌트 개수를 찾고,
     *  G와 R을 같은 값으로 통일 시킨 뒤 한번 더 그래프 탐색을 하면 될 것같음.
     */


    ⌨️ 코드

    JAVA

    import java.io.*;
    import java.util.*;
    
    public class Q10026 {
        static final int[] dy = {-1, 0, 1, 0}, dx = {0, 1, 0, -1};
        static int N, ret1, ret2;
        static char[][] board;
        static boolean[][] visited;
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            N = sc.nextInt();
            board = new char[N][N];
            visited = new boolean[N][N];
            for(int i = 0; i < N; i++)
                board[i] = sc.next().toCharArray();
    
            ret1 = search();
            visited = new boolean[N][N];
            for(int i = 0; i < N; i++)
                for(int j = 0; j < N; j++)
                    if(board[i][j] == 'G')
                        board[i][j] = 'R';
            ret2 = search();
            System.out.println(ret1 + " " + ret2);
        }
    
        public static int search() {
            int ans = 0;
            for(int i = 0; i < N; i++) {
                for(int j = 0; j < N; j++) {
                    if(visited[i][j])
                        continue;
                    visited[i][j] = true;
                    bfs(new Point(i, j));
                    ans++;
                }
            }
            return ans;
        }
    
        public static void bfs(Point start) {
            Queue<Point> q = new LinkedList<>();
            q.add(start);
            while(!q.isEmpty()) {
                Point cur = q.poll();
                for(int d = 0; d < 4; d++) {
                    int ny = cur.y + dy[d];
                    int nx = cur.x + dx[d];
                    if(ny < 0 || nx < 0 || ny >= N || nx >= N || visited[ny][nx] || board[ny][nx] != board[cur.y][cur.x]) continue;
                    visited[ny][nx] = true;
                    q.add(new Point(ny, nx));
                }
            }
        }
    
        static class Point {
            int y, x;
    
            public Point(int y, int x) {
                this.y = y;
                this.x = x;
            }
        }
    }

    '알고리즘 > 백준' 카테고리의 다른 글

    [백준]11559. Puyo Puyo (Java)  (0) 2021.09.03
    [백준]10216. Count Circle Groups (Java)  (0) 2021.09.03
    [백준]9252. LCS2 (Java)  (0) 2021.08.30
    [백준]9251. LCS (Java)  (0) 2021.08.30
    [백준]9084. 동전 (Java)  (0) 2021.08.30

    댓글

Designed by Tistory.