본문 바로가기
PS/BOJ

백준 6186 자바 - Best Grass (BOJ 6186 JAVA)

by Nahwasa 2022. 3. 12.

문제 : boj6186

 

  상하좌우로 인접한 풀때기들의 군락(?) 수만 잘 구하면 된다.

그러니 일단 입력받고, 방문체크 하면서 dfs 돌리며 수를 세면 쉽게 구할 수 있다.

 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private void dfs(int r, int c, boolean[][] arr) {
        for (int dr = -1; dr <= 1; dr++) {
            for (int dc = -1; dc <= 1; dc++) {
                if (((dr^dc)&1)!=1) continue;
                int nr = r+dr;
                int nc = c+dc;
                try {
                    if (arr[nr][nc]) {
                        arr[nr][nc] = false;
                        dfs(nr, nc, arr);
                    }
                } catch (ArrayIndexOutOfBoundsException e) {
                    continue;
                }
            }
        }
    }

    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int r = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        boolean[][] arr = new boolean[r][c];
        for (int i = 0; i < r; i++) {
            String row = br.readLine();
            for (int j = 0; j < c; j++) {
                arr[i][j] = row.charAt(j)=='#'?true:false;
            }
        }
        int cnt = 0;
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                if (arr[i][j]) {
                    arr[i][j] = false;
                    cnt++;
                    dfs(i, j, arr);
                }
            }
        }
        System.out.println(cnt);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글