Painter.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import java.util.Scanner;
  2. public class Painter {
  3. private static int N = 0, M = 0;
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. N = scanner.nextInt();
  7. M = scanner.nextInt();
  8. scanner.nextLine(); // !!important
  9. char[][] board = new char[N][M];
  10. for (int i = 0; i < N; i++) {
  11. board[i] = scanner.nextLine().toCharArray();
  12. }
  13. int cnt = 0;
  14. for (int i = 0; i < N; i++) {
  15. for (int j = 0; j < M; j++) {
  16. switch (board[i][j]) {
  17. case 'G':
  18. cnt++;
  19. dfs(board, j, i, 1, 1, 'Y', 'B');
  20. case 'B':
  21. cnt++;
  22. dfs(board, j, i, 1, -1, 'B', 'Y');
  23. break;
  24. case 'Y':
  25. cnt++;
  26. dfs(board, j, i, 1, 1, 'Y', 'B');
  27. break;
  28. default:
  29. break;
  30. }
  31. }
  32. }
  33. System.out.println(cnt);
  34. scanner.close();
  35. }
  36. private static void dfs(char[][] board, int x, int y, int dx, int dy, char curr, char next) {
  37. if (x < 0 || M <= x || y < 0 || N <= y || board[y][x] == 'X' || board[y][x] == next) return;
  38. if (board[y][x] == curr) {
  39. board[y][x] = 'X';
  40. } else if (board[y][x] == 'G') {
  41. board[y][x] = next;
  42. }
  43. dfs(board, x+dx, y+dy, dx, dy, curr, next);
  44. dfs(board, x-dx, y-dy, dx, dy, curr, next);
  45. }
  46. }