12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import java.util.Scanner;
- public class Painter {
- private static int N = 0, M = 0;
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- N = scanner.nextInt();
- M = scanner.nextInt();
- scanner.nextLine(); // !!important
- char[][] board = new char[N][M];
- for (int i = 0; i < N; i++) {
- board[i] = scanner.nextLine().toCharArray();
- }
- int cnt = 0;
- for (int i = 0; i < N; i++) {
- for (int j = 0; j < M; j++) {
- switch (board[i][j]) {
- case 'G':
- cnt++;
- dfs(board, j, i, 1, 1, 'Y', 'B');
- case 'B':
- cnt++;
- dfs(board, j, i, 1, -1, 'B', 'Y');
- break;
- case 'Y':
- cnt++;
- dfs(board, j, i, 1, 1, 'Y', 'B');
- break;
- default:
- break;
- }
- }
- }
- System.out.println(cnt);
- scanner.close();
- }
- private static void dfs(char[][] board, int x, int y, int dx, int dy, char curr, char next) {
- if (x < 0 || M <= x || y < 0 || N <= y || board[y][x] == 'X' || board[y][x] == next) return;
- if (board[y][x] == curr) {
- board[y][x] = 'X';
- } else if (board[y][x] == 'G') {
- board[y][x] = next;
- }
- dfs(board, x+dx, y+dy, dx, dy, curr, next);
- dfs(board, x-dx, y-dy, dx, dy, curr, next);
- }
- }
|