Problem Solving/백준

[백준-21736] 헌내기는 친구가 필요해

<문제>


<Code>

//21736] 헌내기는 친구가 필요해 
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string s[601];
int ch[601][601];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int n, m, res;

void DFS(int x, int y){
	int nx, ny; //앞으로 이동할 좌표
	
	if(s[x][y]=='P'){
		res++;
	}
	for(int i=0; i<4; i++){
		nx=x+dx[i];
		ny=y+dy[i];
		
		if(nx<0 || ny<0 || nx>=n || ny>=m){ //캠퍼스의 끝이면 
			continue;	
		}
		if(s[nx][ny]!='X' && ch[nx][ny]==0){ //벽이 아니고, 방문한적이 없다면 
			ch[nx][ny]=1;
			DFS(nx, ny);
		}
		
		/*
		if(nx>=0 && ny>=0 && nx<n && ny<m && ch[nx][ny]==0){
			if(s[nx][ny]!='X'){
				ch[nx][ny]=1;
				DFS(nx, ny);
			}
		}
		*/	
	}
			
}

int main() {
	freopen("input.txt","rt", stdin);
	
	int ii, jj; //DFS() 호출을 위한 임시변수 
	scanf("%d %d", &n, &m);

	for(int i=0; i<n; i++){
		cin>>s[i];
	}
	
	
	for(int i=0; i<n; i++){
		for(int j=0; j<m; j++){
			if(s[i][j]=='I'){
				ch[i][j]=1; //방문체크 
				ii=i;
				jj=j;
			}
		}
	}
	
	DFS(ii, jj);
	
	if(res==0){
		printf("TT");
	}else{
		printf("%d", res);
	}
	
	return 0;
}

<Comment>

전형적인 DFS로 상하좌우 탐색하면서 만날 수 있는 친구 수를 세는 문제.


https://www.acmicpc.net/problem/21736

 

21736번: 헌내기는 친구가 필요해

2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고

www.acmicpc.net