문제

링크

풀이

#include <stdio.h>
#include <stdbool.h>
 
int n, m;
char a[600][600];
bool checked[600][600];
 
int find(int x, int y) {
  int count = 0;
 
  checked[x][y] = true;
  if (x > 0 && a[x-1][y] != 'X' && !checked[x-1][y]) count += find(x-1, y);
  if (x < n-1 && a[x+1][y] != 'X' && !checked[x+1][y]) count += find(x+1, y);
  if (y > 0 && a[x][y-1] != 'X' && !checked[x][y-1]) count += find(x, y-1);
  if (y < m-1 && a[x][y+1] != 'X' && !checked[x][y+1]) count += find(x, y+1);
  if (a[x][y] == 'P') count++;
  return count;
}
 
int main(void) {
  int x, y;
 
  scanf("%d %d", &n, &m);
  for (int i=0; i<n; i++) {
    for (int j=0; j<m; j++) {
      scanf(" %c", &a[i][j]);
      checked[i][j] = false;
      if (a[i][j] == 'I') {
        x = i;
        y = j;
      }
    }
  }
 
  int count = find(x, y);
  if (count == 0) printf("TT");
  else printf("%d", count);
  return 0;
}