[๋ฐฑ์ค(BOJ)] ๋ฏธ์ธ๋จผ์ง ์๋ !(17144) C++
๋ฌธ์ : BOJ_17144๋ฒ ๋ฏธ์ธ๋จผ์ง ์๋ !
๋ฌธ์ ์ค๋ช
์์ ํ์, bfs
ํฌ๊ธฐ๊ฐ R*C์ธ ๊ฒฉ์ํ์์ ๋ฏธ์ธ๋จผ์ง๊ฐ 4๋ฐฉํฅ์ผ๋ก ํ์ฅ๋ ๋ค, ํ์ฅ๋ ์ดํ์ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ์ํด ์์ชฝ์ ๋ฐ์๊ณ, ์๋์ชฝ์ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋ฏธ์ธ๋จผ์ง๋ค์ด ๋์๊ฐ๋๋ค.
์ด ๋ ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ๋ค์ด๊ฐ ๋ฏธ์ธ๋จผ์ง๋ ์ฌ๋ผ์ง๋๋ค.
Solution
R๊ณผ C์ ์ต๋๊ฐ์ด 50, T์ ์ต๋๊ฐ์ด 1000์ด๊ธฐ ๋๋ฌธ์, 50501,000=2,500,000์์ผ๋ก ์์ ํ์์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฏธ์ธ๋จผ์ง์ ์์น์ ๊ฐ์ queue์ ๋ค ๋ฃ์ด์ฃผ๊ณ 4๋ฐฉํฅ์ ํผํธ๋ฆฌ๋ bfs๋ฅผ ํ ๋ค, ๋จ์ for๋ฌธ์ผ๋ก ๋ฐ์๊ณ์ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์์ต๋๋ค.
Description
- queue์ ํด๋น ์์น์ ๊ฐ, ํ, ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ธฐ์ํด pair๋ฅผ ์ด์ค์ผ๋ก ์ฌ์ฉํ์ต๋๋ค.
- ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ๊ฐ์ -1์ด๋ฏ๋ก, ๋ง์ง๋ง sum์ 2๋ฅผ ๋ํด์ค๋๋ค.
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int R, C, T;
int map[51][51];
int st, ed;
int dx[] = { 0,0,1,-1 };
int dy[] = { 1,-1,0,0 };
int main(void) {
scanf("%d%d%d", &R, &C, &T);
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= C; j++) {
scanf("%d", &map[i][j]);
if (map[i][j] == -1) {
if (st == 0) st = i;
else ed = i;
}
}
}
while (T--) {
queue<pair<int, pair<int, int>>> q; // q.push({๊ฐ,{ํ,์ด}});
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= C; j++) {
if (map[i][j] > 0) q.push({ map[i][j],{ i,j } });
}
}
while (!q.empty()) {
int x = q.front().second.first;
int y = q.front().second.second;
int now_val = q.front().first;
q.pop();
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (map[nx][ny] == -1) continue;
if (nx > R || ny > C || nx < 1 || ny < 1) continue;
map[nx][ny] += now_val / 5;
map[x][y] -= now_val / 5;
}
}
// ๋ฐ์๊ณ, ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๊ธฐ ์ํ ๋จ์ ํฌ๋ฌธ
for (int i = st - 1; i >= 2; i--) map[i][1] = map[i - 1][1];
for (int i = 1; i < C; i++) map[1][i] = map[1][i + 1];
for (int i = 1; i < st; i++) map[i][C] = map[i + 1][C];
for (int i = C; i > 2; i--) map[st][i] = map[st][i - 1];
map[st][2] = 0;
for (int i = ed + 1; i < R; i++) map[i][1] = map[i + 1][1];
for (int i = 1; i < C; i++) map[R][i] = map[R][i + 1];
for (int i = R; i > ed; i--) map[i][C] = map[i - 1][C];
for (int i = C; i > 2; i--) map[ed][i] = map[ed][i - 1];
map[ed][2] = 0;
}
int sum = 0;
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= C; j++) {
sum += map[i][j];
}
}
printf("%d\n", sum + 2);
// ๊ณต๊ธฐ์ฒญ์ ๊ธฐ์ ๊ฐ์ -1์ด๋ฏ๋ก, ๋ง์ง๋ง์ 2๋ฅผ ๋ํด์ค๋ค.
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ํ์์ค๋ฐฐ์ (1931) (0) | 2022.03.06 |
---|---|
[BOJ] ์ซ์ ์ผ๊ตฌ(2503) (0) | 2022.03.06 |
[BOJ] ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ(14888) (0) | 2022.03.06 |
[BOJ] ํด์งํด์ง(1326) (0) | 2022.03.05 |
[BOJ] ํผ๊ฑฐ์จ๊ณผ ์ฌ๊ณผ(2942) (0) | 2022.03.05 |