https://www.acmicpc.net/problem/3184
3184번: 양
첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다.
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
int[] dr = { -1, 0, 1, 0 };
int[] dc = { 0, 1, 0, -1 };
int sheep = 0;
int wolf = 0;
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());
char[][] map = new char[R][];
boolean[][] visited = new boolean[R][C];
for (int i = 0; i < R; i++) {
map[i] = br.readLine().toCharArray();
} // end of input
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
if (!visited[i][j] && (map[i][j] == 'v' || map[i][j] == 'o')) {
int w = 0;
int s = 0;
Queue<int[]> q = new LinkedList<>();
q.offer(new int[] { i, j });
visited[i][j] = true;
while (!q.isEmpty()) {
int[] now = q.poll();
if (map[now[0]][now[1]] == 'v') w++;
else if (map[now[0]][now[1]] == 'o') s++;
for (int dir = 0; dir < 4; dir++) {
int nr = now[0] + dr[dir];
int nc = now[1] + dc[dir];
if (0 <= nr && nr < R && 0 <= nc && nc < C && !visited[nr][nc] && map[nr][nc] != '#') {
q.offer(new int[] { nr, nc });
visited[nr][nc] = true;
}
}
}
if (w < s) sheep += s;
else wolf += w;
}
}
}
System.out.print(sheep + " " + wolf);
}
}
'OJ' 카테고리의 다른 글
[BOJ] 26091 현대모비스 소프트웨어 아카데미 (JAVA) (0) | 2023.07.17 |
---|---|
[BOJ] 9019 DSLR (JAVA) (0) | 2023.07.16 |
[BOJ] 11722 가장 긴 감소하는 부분 수열 (JAVA) (0) | 2023.07.14 |
[BOJ] 1343 폴리오미노 (JAVA) (0) | 2023.07.13 |
[BOJ] 28062 준석이의 사탕 사기 (JAVA) (0) | 2023.07.12 |