๋ฌธ์
2020๋
์ ์
ํํ ํ๋ด๊ธฐ ๋์ฐ์ด๊ฐ ์๋ค. ๋์ฐ์ด๋ ๋น๋๋ฉด ์์
๋๋ฌธ์ ํ๊ต์ ๊ฐ์ง ๋ชปํด ํ๊ต์ ์๋ ์น๊ตฌ๊ฐ ์์๋ค. ๋๋์ด ๋๋ฉด ์์
์ ํ๊ฒ ๋ ๋์ฐ์ด๋ ์ด์ ์บ ํผ์ค ๋ด์ ์ฌ๋๋ค๊ณผ ์นํด์ง๊ณ ์ถ๋ค.
๋์ฐ์ด๊ฐ ๋ค๋๋ ๋ํ์ ์บ ํผ์ค๋ $N \times M$ ํฌ๊ธฐ์ด๋ฉฐ ์บ ํผ์ค์์ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ ๋ฒฝ์ด ์๋ ์ํ์ข์ฐ๋ก ์ด๋ํ๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ๋์ฐ์ด๊ฐ ($x$, $y$)์ ์๋ค๋ฉด ์ด๋ํ ์ ์๋ ๊ณณ์ ($x+1$, $y$), ($x$, $y+1$), ($x-1$, $y$), ($x$, $y-1$)์ด๋ค. ๋จ, ์บ ํผ์ค์ ๋ฐ์ผ๋ก ์ด๋ํ ์๋ ์๋ค.
๋ถ์ํ ๋์ฐ์ด๋ฅผ ์ํ์ฌ ์บ ํผ์ค์์ ๋์ฐ์ด๊ฐ ๋ง๋ ์ ์๋ ์ฌ๋์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์บ ํผ์ค์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ $N$ ($ 1 \leq N \leq 600$), $M$ ($ 1 \leq M \leq 600$)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ $N$๊ฐ์ ์ค์๋ ์บ ํผ์ค์ ์ ๋ณด๋ค์ด ์ฃผ์ด์ง๋ค.O๋ ๋น ๊ณต๊ฐ,X๋ ๋ฒฝ,I๋ ๋์ฐ์ด,P๋ ์ฌ๋์ด๋ค.I๊ฐ ํ ๋ฒ๋ง ์ฃผ์ด์ง์ด ๋ณด์ฅ๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋์ฐ์ด๊ฐ ๋ง๋ ์ ์๋ ์ฌ๋์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋จ, ์๋ฌด๋ ๋ง๋์ง ๋ชปํ ๊ฒฝ์ฐTT๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
๋จ์ BFS ๋ฌธ์
๊ทผ๋ฐ ๋ฌธ์ ๋ด์ฉ์ด ๋๋ฌด ์ํ๋ค
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef pair<int,int> ci;
int dx[] = {0,0,-1,1};
int dy[] = {1,-1,0,0};
int main() {
int n, m;
cin >> n >> m;
vector<vector<char>>board(n, vector<char>(m));
queue<ci> q;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cin >> board[i][j];
if(board[i][j] == 'I') {
q.push({i,j});
}
}
}
int ans = 0;
while(!q.empty()) {
ci cur = q.front();
q.pop();
for(int dir=0; dir<4; dir++) {
int x = cur.first + dx[dir];
int y = cur.second + dy[dir];
if(x<0 || x>=n || y<0 || y>=m) {
continue;
}
if(board[x][y] == 'X' || board[x][y] == 'I') {
continue;
}
if(board[x][y] == 'P') {
ans++;
}
board[x][y] = 'I';
q.push({x,y});
}
}
if(ans==0) {
cout << "TT";
} else {
cout << ans;
}
return 0;
}
'๐ BOJ > Class 3' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 30804๋ฒ: ๊ณผ์ผ ํํ๋ฃจ (Silver II) (0) | 2024.11.12 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 14940๋ฒ: ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ (Silver I) (0) | 2024.11.02 |
[BOJ][C++] ๋ฐฑ์ค 1676๋ฒ: ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์ (0) | 2023.04.19 |
[BOJ][C++] ๋ฐฑ์ค 1927๋ฒ: ์ต์ ํ (0) | 2023.04.11 |
[BOJ][C++] ๋ฐฑ์ค 11403๋ฒ: ๊ฒฝ๋ก ์ฐพ๊ธฐ (0) | 2023.04.10 |