https://www.acmicpc.net/problem/2636
๋ฌธ์
์ ์ฌ๊ฐํ ์นธ๋ค๋ก ์ด๋ฃจ์ด์ง ์ฌ๊ฐํ ๋ชจ์์ ํ์ด ์๊ณ , ๊ทธ ์์ ์์ ์น์ฆ(ํ์์ผ๋ก ํ์๋ ๋ถ๋ถ)๊ฐ ๋์ฌ ์๋ค.
ํ์ ๊ฐ์ฅ์๋ฆฌ์๋ ์น์ฆ๊ฐ ๋์ฌ ์์ง ์์ผ๋ฉฐ ์น์ฆ์๋ ํ๋ ์ด์์ ๊ตฌ๋ฉ์ด ์์ ์ ์๋ค.
์ด ์น์ฆ๋ฅผ ๊ณต๊ธฐ ์ค์ ๋์ผ๋ฉด ๋ น๊ฒ ๋๋๋ฐ ๊ณต๊ธฐ์ ์ ์ด๋ ์นธ์ ํ ์๊ฐ์ด ์ง๋๋ฉด ๋ น์ ์์ด์ง๋ค.
์น์ฆ์ ๊ตฌ๋ฉ ์์๋ ๊ณต๊ธฐ๊ฐ ์์ง๋ง ๊ตฌ๋ฉ์ ๋๋ฌ์ผ ์น์ฆ๊ฐ ๋ น์์ ๊ตฌ๋ฉ์ด ์ด๋ฆฌ๋ฉด ๊ตฌ๋ฉ ์์ผ๋ก ๊ณต๊ธฐ๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์น์ฆ์ ๊ตฌ๋ฉ์ ๋๋ฌ์ผ ์น์ฆ๋ ๋ น์ง ์๋๋ค.
๋ค์ ํ ์๊ฐ ํ์๋ ๋ น์ ์์ด์ง๊ณ ๋จ์ ์กฐ๊ฐ๋ค์ ํ ์๊ฐ์ด ๋ ์ง๋๋ฉด ๋ชจ๋ ๋ น์ ์์ด์ง๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ฒ์ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ์์ด์ง๋ ๋ฐ๋ ์ธ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
์น์ฆ๊ฐ ๋ น๋ ๊ณผ์ ์์ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ์ง ์๋ ์๋ค.
์ ๋ ฅ์ผ๋ก ์ฌ๊ฐํ ๋ชจ์์ ํ์ ํฌ๊ธฐ์ ํ ์กฐ๊ฐ์ ์น์ฆ๊ฐ ํ ์์ ์ฃผ์ด์ก์ ๋, ๊ณต๊ธฐ ์ค์์ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์ ์์ด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ๋ชจ๋ ๋ น๊ธฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ์กฐ๊ฐ์ด ๋์ฌ ์๋ ์นธ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ฌ๊ฐํ ๋ชจ์ ํ์ ์ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด๊ฐ ์์ ์ ์๋ก ์ฃผ์ด์ง๋ค.
์ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด๋ ์ต๋ 100์ด๋ค.
ํ์ ๊ฐ ๊ฐ๋ก์ค์ ๋ชจ์์ด ์ ์ค๋ถํฐ ์ฐจ๋ก๋ก ๋์งธ ์ค๋ถํฐ ๋ง์ง๋ง ์ค๊น์ง ์ฃผ์ด์ง๋ค.
์น์ฆ๊ฐ ์๋ ์นธ์ 0, ์น์ฆ๊ฐ ์๋ ์นธ์ 1๋ก ์ฃผ์ด์ง๋ฉฐ ๊ฐ ์ซ์ ์ฌ์ด์๋ ๋น์นธ์ด ํ๋์ฉ ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ์น์ฆ๊ฐ ๋ชจ๋ ๋ น์์ ์์ด์ง๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ถ๋ ฅํ๊ณ ,
๋์งธ ์ค์๋ ๋ชจ๋ ๋ น๊ธฐ ํ ์๊ฐ ์ ์ ๋จ์์๋ ์น์ฆ์กฐ๊ฐ์ด ๋์ฌ ์๋ ์นธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
๋ณด๋์ ํ์ํ ๊ฑด ๋ค๊ฐ์ง
1: ์น์ฆ, 2: ๋ น์ ์์ ์ธ ์น์ฆ, 3: ์ธ๋ถ ๊ณต๊ธฐ, 0: ๋ด๋ถ ๊ณต๊ธฐ
๋ค์ ๋จ๊ณ๋ก ์งํ๋๋ค
1. ์ธ๋ถ์ ์ ์ด๋ ๊ณต๊ธฐ(0)๋ค์ ์ธ๋ถ ๊ณต๊ธฐ(3)๋ก ๋ฐ๊พผ๋ค
2. ์น์ฆ(1)์ค ์ธ๋ถ๊ณต๊ธฐ(3)๊ณผ ์ ์ดํ ์น์ฆ๋ค๋ง ๋ น์ ์์ ์ธ ์น์ฆ(2)๋ก ๋ฐ๊ฟ์ค๋ค
3. ๋ น์ ์์ ์ธ ์น์ฆ(2)๋ค์ ๋ น์ฌ์ ๋น ์๋ฆฌ(0)๋ก ๋ฐ๊พผ๋ค
2๋ฒ๊ณผ 3๋ฒ ๊ณผ์ ์ ๋์์ ํ ๊ฒฝ์ฐ(์ฐพ์๋ง์ ๋ น์ฌ๋ฒ๋ฆด ๊ฒฝ์ฐ)
๊ฐ์ ์๊ฐ์ ์ฌ๋ผ์ง ๋ค๋ฅธ ์น์ฆ์ ์ํฅ์ ๋ฐ์
์์ด์ง์ง ์์๋ ๋ ์น์ฆ๊น์ง ์์ด์ง ์ ์์ผ๋ฏ๋ก ๋ฐ๋ก ์งํํด์ค์ผํ๋ค.
1๋ฒ์ ๊ฒฝ์ฐ 0์ธ ๋ถ๋ถ์ ์ฐพ์ dfs๋ฅผ ์งํํ์ฌ ์ธ์ ํ 0๋ค์ 3์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์์ ์ ๋ํด์๋ ๋ค์๊ณผ ๊ฐ์ด ์งํ๋๋ค
// ์๊ฐ0
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 1 1 3 3 3
3 1 1 1 3 3 3 1 1 3 3 3
3 1 1 1 1 1 1 3 3 3 3 3
3 1 1 1 1 1 0 1 1 3 3 3
3 1 1 1 1 0 0 1 1 3 3 3
3 3 1 1 0 0 0 1 1 3 3 3
3 3 1 1 1 1 1 1 1 3 3 3
3 3 1 1 1 1 1 1 1 3 3 3
3 3 1 1 1 1 1 1 1 3 3 3
3 3 1 1 1 1 1 1 1 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
// ์๊ฐ1
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 1 1 3 3 3 3 3 3 3 3
3 3 1 1 1 1 3 3 3 3 3 3
3 3 1 1 1 3 3 1 3 3 3 3
3 3 3 1 3 3 3 1 3 3 3 3
3 3 3 1 1 1 1 1 3 3 3 3
3 3 3 1 1 1 1 1 3 3 3 3
3 3 3 1 1 1 1 1 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
// ์๊ฐ2
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 1 3 3 3 3 3 3 3 3
3 3 3 1 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 1 1 1 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
// ์๊ฐ3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3 3 3 3 3
์ฝ๋
#include <iostream>
#include <vector>
using namespace std;
typedef pair<int, int> ci;
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
void dfs(vector<vector<int>>&board, int i, int j, int r, int c) {
if(i<0 || i>=r || j<0 || j>=c) return;
if(board[i][j] != 0) return;
board[i][j] = 3;
for(int dir=0; dir<4; dir++) {
int x = i+dx[dir];
int y = j+dy[dir];
dfs(board, x, y, r, c);
}
}
ci solution(vector<vector<int>>&board, int r, int c, int cheese) {
int _time = 0, prevCheese = 0;
dfs(board, 0, 0, r, c); // ์ธ๋ถ ๊ณต๊ธฐ 3์ผ๋ก ๋ฐ๊พธ๊ธฐ
while(true) {
if(cheese==0) {
break;
}
// 1์๊ฐ ์ ์น์ฆ ๊ฐฏ์ ์ ์ฅ
prevCheese = cheese;
// ์น์ฆ(1)๋ค ์ค ์ธ๋ถ๊ณต๊ธฐ(3)์ ์ ์ดํ์ผ๋ฉด ๋
น์ ๋์(2)๋ก ํ์ํ๊ธฐ
for(int i=0; i<r; i++) {
for(int j=0; j<c; j++) {
if(board[i][j]!=1) {
continue;
}
for(int dir=0; dir<4; dir++) {
int x = i + dx[dir];
int y = j + dy[dir];
if(board[x][y]==3) {
board[i][j] = 2;
}
}
}
}
// ๋
น์ ์น์ฆ(2)๋ค ๋
น์ด๊ธฐ
vector<ci> melted;
for(int i=0; i<r; i++) {
for(int j=0; j<c; j++) {
if(board[i][j]==2) {
board[i][j] = 0;
cheese--;
melted.push_back({i,j});
}
}
}
// ๋
ธ์ถ๋ ๋ด๋ถ๊ณต๊ธฐ(0) ์ธ๋ถ๊ณต๊ธฐ๋ก ๋ฐ๊พธ๊ธฐ(3)
for(ci i : melted) {
dfs(board, i.first, i.second, r, c);
}
// ์๊ฐ ์ฆ๊ฐ
_time++;
}
return {_time, prevCheese};
}
int main() {
// ์
๋ ฅ
int r, c, cheese=0;
cin >> r >> c;
vector<vector<int>> board(r, vector<int>(c));
for(int i=0; i<r; i++) {
for(int j=0; j<c; j++) {
int input;
cin >> input;
if(input == 1) {
cheese++;
}
board[i][j] = input;
}
}
// ์ถ๋ ฅ
ci answer = solution(board, r, c, cheese);
cout << answer.first << "\n" << answer.second;
return 0;
}
'๐ Cpp' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1004๋ฒ: ์ด๋ฆฐ ์์ (0) | 2024.08.12 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 2217๋ฒ: ๋กํ (0) | 2024.03.15 |
[BOJ][C++] ๋ฐฑ์ค 1485๋ฒ: ๊ฐ๋ก์ (0) | 2024.03.13 |
[BOJ][C++] ๋ฐฑ์ค 15686๋ฒ: ์นํจ๋ฐฐ๋ฌ (0) | 2024.03.11 |
[BOJ][C++] ๋ฐฑ์ค 1037๋ฒ: ์ฝ์ (0) | 2024.03.08 |