๐ค๋ฌธ์ ์ดํด
๊ทธ๋ฅ ๋จ์ ๊ตฌํ ๋ฌธ์ ๋ก ์ ์ฝ๊ณ ์กฐ๊ฑด์ ๋ง์ถฐ ๋น๊ตฌ๋ฆ์ ์ฎ๊ฒจ์ฃผ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
๐ฅํ์ด๐ฅ
(i, j)์ ์์นํ ๋ฐ๊ตฌ๋์ ๋ด๊ธด ๋ฌผ์ ์์ ๋ํ๋ด๋ ๋ฐฐ์ด map[i][j]
๋ช ๋ น ๊ณผ์ 3๋ฒ์์ ์ฌ๋ผ์ง ๊ตฌ๋ฆ์ ํ์ํ๋ ๋ฐฐ์ด visited[i][j]
๋ช ๋ น์์ ์ฃผ๋ ๋ฐฉํฅ์ ์๋ฏธํ๋ di[k]์ dj[k]
๊ฑฐ๋ฆฌ๊ฐ 1์ธ ๋๊ฐ์ ์ ์๋ฏธํ๋ diag_i[k]์ diag_j[k]
๊ตฌ๋ฆ์ ์์น๋ฅผ ์ ์ฅํ ํ cloud
m๋ฒ์ ๋ช ๋ น๋ง๋ค ์๋ ๊ณผ์ ์ ์ํํด์ค๋ค.
1. cloud์ front ๋น๊ตฌ๋ฆ์ ์์น์ ๋ฐฉํฅ * ๊ฑฐ๋ฆฌ๊ฐ์ ๋ํด์ฃผ๊ณ ๊ฒฉ์ํฌ๊ธฐ(N)๋งํผ ๋๋จธ์ง ์ฐ์ฐ
2. ๊ณ์ฐ๋ ์์น๊ฐ์ด ์์์ด๊ฑฐ๋ 0์ด๋ฉด +N
3. popํด์ฃผ๊ณ ๊ณ์ฐ๋ ์์น๊ฐ์ ๋น์ ์์ +1ํ๊ณ ์์น๊ฐ์ cloud์ push
4. ์ฎ๊ฒจ์ง ๋น๊ตฌ๋ฆ์ ๋ํด ๋๊ฐ์ ๊ฑฐ๋ฆฌ1์ ๋ฌผ์ด ์๋ ๋ฐ๊ตฌ๋์ ๊ฐ์๋งํผ ๋น๊ตฌ๋ฆ์ด ์์นํ ๋ฐ๊ตฌ๋์ ๋ฌผ ์ถ๊ฐ
5. ๋ฌธ์ ์ ๋ช ๋ น ๊ณผ์ 3๋ฒ์์ ์ฌ๋ผ์ง ๊ตฌ๋ฆ์์ visited์ ํ์
6. ๋ชจ๋ ๋ฐ๊ตฌ๋๋ฅผ ๋๋ฉด์ ๋ช ๋ น ๊ณผ์ 3๋ฒ์์ ์ฌ๋ผ์ง ๊ตฌ๋ฆ์ด ์๋๋ฉด์ ๋ฐ๊ตฌ๋์ ๋ฌผ์ด 2์ด์ ์๋ ๊ณณ์ ์์น๋ฅผ cloud์ ์ถ๊ฐํ๊ณ ๋ฐ๊ตฌ๋์์ ๋ฌผ 2 ๋บ
7. visited ์ด๊ธฐํ
๋ง์ง๋ง์ map์ ๋ชจ๋ ๊ฐ์ ๋ค ๋ํด ์ถ๋ ฅํด์ค๋ค.
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int n, m, r, c, d, s;
int map[51][51];
bool visited[51][51];
int di[9] = {0, 0, -1, -1, -1, 0, 1, 1, 1};
int dj[9] = {0, -1, -1, 0, 1, 1, 1, 0, -1};
int diag_i[4] = {-1, -1, 1, 1};
int diag_j[4] = {-1, 1, -1, 1};
queue<pair<int, int>> cloud;
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> map[i][j];
}
}
cloud.push({n, 1});
cloud.push({n, 2});
cloud.push({n - 1, 1});
cloud.push({n - 1, 2});
for (int i = 0; i < m; i++) {
cin >> d >> s;
int size = cloud.size();
for (int j = 0; j < size; j++) {
r = (cloud.front().first + di[d] * s) % n;
c = (cloud.front().second + dj[d] * s) % n;
if (r <= 0) {
r += n;
}
if (c <= 0) {
c += n;
}
cloud.pop();
cloud.push({r, c});
map[r][c]++;
}
while (!cloud.empty()) {
int cnt = 0;
r = cloud.front().first;
c = cloud.front().second;
cloud.pop();
for (int k = 0; k < 4; k++) {
int mr = r + diag_i[k];
int mc = c + diag_j[k];
if (mr <= 0 || mc <= 0 || mr > n || mc > n) continue;
if (map[mr][mc] > 0)
cnt++;
}
visited[r][c] = true;
map[r][c] += cnt;
}
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++) {
if (map[j][k] >= 2 && !visited[j][k]) {
cloud.push({j, k});
map[j][k] -= 2;
}
}
}
memset(visited, false, sizeof(visited));
}
int total = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
total += map[i][j];
}
}
cout << total;
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 17404๋ฒ RGB๊ฑฐ๋ฆฌ 2 (0) | 2022.11.02 |
---|---|
[๋ฐฑ์ค/C++] 4889๋ฒ ์์ ์ ์ธ ๋ฌธ์์ด (0) | 2022.10.27 |
[๋ฐฑ์ค/C++] 24524๋ฒ ์๋ฆ๋ค์ด ๋ฌธ์์ด (0) | 2022.10.05 |
[๋ฐฑ์ค/C++] 9663๋ฒ N-Queen (0) | 2022.08.16 |
[๋ฐฑ์ค/C++] 16457๋ฒ ๋จํ์ ์ด์ผ๊ธฐ (0) | 2022.08.12 |