문제 : 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();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 3022 자바 - PRASE (BOJ 3022 JAVA) (0) | 2022.03.14 |
---|---|
백준 6550 자바 - 부분 문자열 (BOJ 6550 JAVA) (0) | 2022.03.13 |
백준 14472 자바 - 休憩スペース (Refreshment Area) (BOJ 14472 JAVA) (0) | 2022.03.11 |
백준 14719 자바 - 빗물 (BOJ 14719 JAVA) (0) | 2022.03.10 |
백준 21356 자바 - Hundraelva kronor (BOJ 21356 JAVA) (0) | 2022.03.09 |
댓글