์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- OS
- Spring
- ๋ฐ์ดํฌ์คํธ๋ผ
- ๋งต
- ๋์ ํฉ
- ์ฐ์ ์์ ํ
- ์ต๋จ ๊ฒฝ๋ก
- BFS
- CVE
- JPA
- ์ฌ๊ท
- DP
- ๋ฌธ์์ด
- ๋ถํ ์ ๋ณต
- ์ด๋ถ ํ์
- thymeleaf
- ๊ทธ๋ฆฌ๋
- dfs
- dynamic debugging
- Reversing
- GCP
- ์คํ
- c++
- ๊ตฌํ
- ์๋ฎฌ๋ ์ด์
- ๋ฐฑํธ๋ํน
- error
- ์์ ์ ๋ ฌ
- web
- java
- Today
- Total
hades
[Baekjoon] 17144๋ฒ: ๋ฏธ์ธ๋จผ์ง ์๋ ! ๋ณธ๋ฌธ
๐ฅ ๋ฌธ์
https://www.acmicpc.net/problem/17144
๐ ์ค๊ณ
ํ์ฐ, ๋ฐ์๊ณ ์ํ, ์๊ณ ์ํ์ ๊ฐ๊ฐ ๊ตฌํํ๋ฉด ๋๋ค.
๋จผ์ , ํ์ฐ์ ์ค๊ณํด๋ณด์๋ค. ํ์ฐ์ ๋์์ ์ผ์ด๋๊ธฐ ๋๋ฌธ์, ๊ธฐ์กด ๋ฒกํฐ์์ ์งํํ๋ฉด ์๋๋ค.
์๋ฅผ ๋ค์ด, 0ํ 0์ด์์ ํ์ฐ์ด ์ผ์ด๋ฌ๊ณ , ํ์ฐ๋ ์์ 0ํ 1์ด์ ์ถ๊ฐํ๋ฉด, 0ํ 1์ด์์ ํ์ฐ์ด ์ผ์ด๋ ๋, ๋ํด์ง ์์ ๊ณ ๋ คํ ๋ฏธ์ธ๋จผ์ง์ ์์ผ๋ก ํ์ฐ์ด ์ผ์ด๋๋ค. ๋ฐ๋ผ์, ํ์ฐ๊ณผ ๊ด๋ จ๋ ์ฐ์ฐ์ before_spread์์ ํ๊ณ , ํ์ฐ๋๋ ์๊ณผ ๋จ์ ์์ ์ ์ฅํ๊ธฐ ์ํด after_spread๋ฅผ ๋ง๋ค์๋ค.
ํ์ฐ๋๋ ์์ ์ดํฉ์ ๊ตฌํ๊ธฐ ์ํด ํ์ฐ๋๋ ์์น์์ ๋ํ๋ ๊ฒ์ ์ํ์ผ๋, ๋จ์ ์์ ์ ์ฅํ๋ ๋ฐ ์์ด์ =์ผ๋ก ์ฒ๋ฆฌํด์ ๋ฌธ์ ๊ฐ ์์๋ค. =์ผ๋ก ์ฒ๋ฆฌํ ๊ฒฝ์ฐ, ํ์ฐ๋๋ ์์ด ์ ์ฅ๋์์ ๋, ๊ทธ ๊ฐ์ด ๋ฌด์๋ ์ ์๋ค. ๋ฐ๋ผ์ , ํ์ฐ๋๋ ์์ ์ ์ฅํ ๋๋ +๋ฅผ ํด์ฃผ์ด์ผ ํ๋ค.
๋ฐ์๊ณ, ์๊ณ ์ํ์ ํ์ดํ์ ๋๋ถํฐ ์์์ ๊น์ง ์ฒ์ฒํ ํ๋ฉด, ์ฝ๊ฒ ๊ตฌํํ ์ ์๋ค.
๐ ํ์ด
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int r, c, t, spread_amount, result = 0;
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };
vector<vector<int>> before_spread(50, vector<int>(50));
vector<vector<int>> after_spread(50, vector<int>(50));
vector<int> vacuum_row;
void spread() {
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
after_spread[i][j] += before_spread[i][j];
if (before_spread[i][j] == -1) {
continue;
}
spread_amount = before_spread[i][j] / 5;
for (int k = 0; k < 4; k++) {
int new_x = i + dx[k];
int new_y = j + dy[k];
if ((new_x >= 0 && new_x < r && new_y >= 0 && new_y < c) && before_spread[new_x][new_y] != -1) {
after_spread[i][j] -= spread_amount;
after_spread[new_x][new_y] += spread_amount;
}
}
}
}
before_spread = after_spread;
after_spread = vector<vector<int>>(50, vector<int>(50));
}
void clockwise() {
for (int i = vacuum_row[1] + 1; i < r - 1; i++) {
before_spread[i][0] = before_spread[i + 1][0];
}
for (int i = 0; i < c - 1; i++) {
before_spread[r - 1][i] = before_spread[r - 1][i + 1];
}
for (int i = r - 1; i > vacuum_row[1]; i--) {
before_spread[i][c - 1] = before_spread[i - 1][c - 1];
}
for (int i = c - 1; i > 1; i--) {
before_spread[vacuum_row[1]][i] = before_spread[vacuum_row[1]][i - 1];
}
before_spread[vacuum_row[1]][1] = 0;
}
void anti_clockwise() {
for (int i = vacuum_row[0] - 1; i > 0; i--) {
before_spread[i][0] = before_spread[i - 1][0];
}
for (int i = 0; i < c - 1; i++) {
before_spread[0][i] = before_spread[0][i + 1];
}
for (int i = 0; i < vacuum_row[0]; i++) {
before_spread[i][c - 1] = before_spread[i + 1][c - 1];
}
for (int i = c - 1; i > 1; i--) {
before_spread[vacuum_row[0]][i] = before_spread[vacuum_row[0]][i - 1];
}
before_spread[vacuum_row[0]][1] = 0;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> r >> c >> t;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
cin >> before_spread[i][j];
if (before_spread[i][j] == -1) {
vacuum_row.push_back(i);
}
}
}
for (int i = 0; i < t; i++) {
spread();
anti_clockwise();
clockwise();
}
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
result += before_spread[i][j];
}
}
result += 2;
cout << result << "\n";
return 0;
}
'๐ PS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 16236๋ฒ: ์๊ธฐ ์์ด (0) | 2024.09.07 |
---|---|
[Baekjoon] 5639๋ฒ: ์ด์ง ๊ฒ์ ํธ๋ฆฌ (0) | 2024.09.06 |
[Baekjoon] 9935๋ฒ: ๋ฌธ์์ด ํญ๋ฐ (0) | 2024.09.04 |
[Baekjoon] 1197๋ฒ: ์ต์ ์คํจ๋ ํธ๋ฆฌ (0) | 2024.09.02 |
[Baekjoon] 9663๋ฒ: N-Queen (0) | 2024.08.28 |