Baekjoon Review
[Silver 2] 21736번 현내기는 친구가 필요해
hanseongbugi
2023. 11. 3. 14:12
https://www.acmicpc.net/problem/21736
21736번: 헌내기는 친구가 필요해
2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고
www.acmicpc.net
이 문제는 BFS를 통해 길찾기를 하면 해결할 수 있다.
길찾기를 진행하다 P를 만나면 counter를 증가시킨다.
모든 탐색이 끝나고 counter가 초기 상태와 같다면 TT를 출력한다.
#include <iostream>
#include<queue>
using namespace std;
char graph[601][601];
int visited[601][601] = { 0, };
int N, M, counter = 0;
int dx[] = { 0,0,1,-1 };
int dy[] = { -1,1,0,0 };
queue<pair<int, int>> q;
void bfs(int x,int y) {
q.push(make_pair(y, x));
visited[y][x] = 1;
while (!q.empty()) {
int ny = q.front().first;
int nx = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int uy = ny + dy[i];
int ux = nx + dx[i];
if (uy < 0 || ux < 0 || uy>=N || ux>=M) continue;
if (graph[uy][ux] == 'X') continue;
if (!visited[uy][ux]) {
q.push(make_pair(uy, ux));
visited[uy][ux] = 1;
if (graph[uy][ux] == 'P') counter += 1;
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> M;
int x = 0, y = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
char value;
cin >> value;
graph[i][j] = value;
if (value == 'I') {
x = j;
y = i;
}
}
}
bfs(x, y);
if (counter == 0) cout << "TT" << '\n';
else cout<<counter<<'\n';
}