๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/21610
21610๋ฒ: ๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ
๋ง๋ฒ์ฌ ์์ด๋ ํ์ด์ด๋ณผ, ํ ๋ค์ด๋, ํ์ด์ด์คํฐ, ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ํ ์ ์๋ค. ์ค๋ ์๋ก ๋ฐฐ์ด ๋ง๋ฒ์ ๋น๋ฐ๋ผ๊ธฐ์ด๋ค. ๋น๋ฐ๋ผ๊ธฐ๋ฅผ ์์ ํ๋ฉด ํ๋์ ๋น๊ตฌ๋ฆ์ ๋ง๋ค ์ ์๋ค. ์ค๋์ ๋น๋ฐ๋ผ๊ธฐ
www.acmicpc.net
๋ง๋ฒ์ฌ ์์ด ์๋ฆฌ์ฆ ไธญ ๋น๋ฐ๋ผ๊ธฐ ํธ
๊ณจ๋5ํฐ์ด๋ก ๋์์๋๋ฐ ์์ด๋ ๊ฒ ํค๋งธ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
ํ์ด
๋ง๋ฒ์ฌ ์์ด๋ ๋น๋ฐ๋ผ๊ธฐ ์คํฌ์ ๋ฐฐ์ฐ๊ฒ ๋๋ค.
N x N ๊ฒฉ์ํ์์ ๋น๋ฐ๋ผ๊ธฐ ์คํฌ์ ์ฐ์ต์ค์ด๋ค. ๋น๋ฐ๋ผ๊ธฐ๋ฅผ ์์ ํ๋ฉด ์ด๊ธฐ์ (N, 1), (N, 2), (N-1, 1), (N-1, 2) ์ขํ์ ๋น๊ตฌ๋ฆ์ด 4๊ฐ ์๊ธด๋ค.
์์ด๋ M๋ฒ ๋์ ๋น๊ตฌ๋ฆ์ ๋ช ๋ น์ ๋ด๋ฆด ์ ์๊ณ , ์ด๋๋ฐฉํฅ์ 1๋ถํฐ ์์๋๋ก ←, โ, ↑, โ, →, โ, ↓, โ ์ด๋ค. ์ด๋์ ๋ช ๋ นํ๋ฉด ๋ค์์ด ์์๋๋ก ์งํ๋๋ค.
1. ๋ชจ๋ ๊ตฌ๋ฆ์ด di ๋ฐฉํฅ์ผ๋ก si์นธ ์ด๋ํ๋ค.
2. ๊ฐ ๊ตฌ๋ฆ์์ ๋น๊ฐ ๋ด๋ ค ๊ตฌ๋ฆ์ด ์๋ ์นธ์ ๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์์ด 1 ์ฆ๊ฐํ๋ค.
3. ๊ตฌ๋ฆ์ด ๋ชจ๋ ์ฌ๋ผ์ง๋ค.
4. 2์์ ๋ฌผ์ด ์ฆ๊ฐํ ์นธ (r, c)์ ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ์์ ํ๋ค. ๋ฌผ๋ณต์ฌ๋ฒ๊ทธ ๋ง๋ฒ์ ์ฌ์ฉํ๋ฉด, ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ์นธ์ ๋ฌผ์ด ์๋ ๋ฐ๊ตฌ๋์ ์๋งํผ (r, c)์ ์๋ ๋ฐ๊ตฌ๋์ ๋ฌผ์ด ์์ด ์ฆ๊ฐํ๋ค.
์ด๋๋ ์ด๋๊ณผ ๋ค๋ฅด๊ฒ ๊ฒฝ๊ณ๋ฅผ ๋์ด๊ฐ๋ ์นธ์ ๋๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ฑฐ๋ฆฌ๊ฐ 1์ธ ์นธ์ด ์๋๋ค.
์๋ฅผ ๋ค์ด, (N, 2)์์ ์ธ์ ํ ๋๊ฐ์ ์นธ์ (N-1, 1), (N-1, 3)์ด๊ณ , (N, N)์์ ์ธ์ ํ ๋๊ฐ์ ์นธ์ (N-1, N-1)๋ฟ์ด๋ค.
5. ๋ฐ๊ตฌ๋์ ์ ์ฅ๋ ๋ฌผ์ ์์ด 2 ์ด์์ธ ๋ชจ๋ ์นธ์ ๊ตฌ๋ฆ์ด ์๊ธฐ๊ณ , ๋ฌผ์ ์์ด 2 ์ค์ด๋ ๋ค. ์ด๋ ๊ตฌ๋ฆ์ด ์๊ธฐ๋ ์นธ์ 3์์ ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ง ์นธ์ด ์๋์ด์ผ ํ๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ด๊ฐ ๋ช ๋ น์ ๋ด๋ฆฐ ํ์ ๋น๋ฐ๋ผ๊ธฐ ์งํ์ ๋ช ์ ํด๋์๋ค.
์์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ์ด๋ค ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๋ณ๊ฒฝํด์ผํ ๊น?
1. ๋ชจ๋ ๊ตฌ๋ฆ์ ์์น์ ๋ํ ์ ๋ณด
๊ตฌ๋ฆ์ ์์น์ ๋ํ ์ ๋ณด๋ฅผ ์์์ผ ๊ตฌ๋ฆ์ ์ด๋์ํค๊ณ ๊ตฌ๋ฆ์ด ์๋ ์์น์ ๋น๋ฅผ ๋ด๋ ค์ค ์ ์๋ค.
๊ตฌ๋ฆ์ ๋ํ ์ ๋ณด๋ Clouds ๋ผ๋ ๋ฒกํฐ์ ๊ตฌ๋ฆ์ ์ขํ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ผ๋ก ํ๋ค.
2. ์ ์ผ ์ต๊ทผ์ ๊ตฌ๋ฆ์ด ์ด๋์ ์กด์ฌํ๋์ง
5๋ฒ ๋ช ๋ น์์ ๋ฌผ์ ์์ด 2์ด์์ธ ๋ชจ๋ ์นธ์ ๊ตฌ๋ฆ์ด ์๊ธฐ๋๋ฐ, ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ก๋ ์นธ์์๋ ๊ตฌ๋ฆ์ด ์๊ธฐ์ง ์๋๋ค.
๋ฐ๋ผ์ ์ต๊ทผ์ ์ด๋์ ๊ตฌ๋ฆ์ด ์ฌ๋ผ์ก๋์ง์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๋ค.
๋๋ visited[50][50] ๋ฐฐ์ด์ ์ ์ธํด์ ๊ตฌ๋ฆ์ด ์์๋ ์๋ฆฌ๋ง true๋ก ํ์ํด์ฃผ์๋ค.
ํ์ํ๋ ์์ ์ ๊ตฌ๋ฆ์ ์ด๋์ํฌ ๋ ์ด๋ ํ์ ์๋ฆฌ๋ฅผ ํ์ํด์ฃผ๋ฉด ๋๋ค.
3. ๊ฐ ๊ฒฉ์๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฌผ์ ์์ ๋ํ ์ ๋ณด
๊ฐ ๊ฒฉ์ ์นธ๋ง๋ค ๋ฌผ์ ์์ ๊ณผ์ ์ด ์งํ๋จ์ ๋ฐ๋ผ ๊ณ์ ๋ณ๊ฒฝํด์ฃผ์ด์ผํ๋ค. ๋ฌธ์ ์์ ์ฃผ์ด์ง๋๋ก A[r][c] ๋ฐฐ์ด์ ๋ง๋ค์ด์ ๊ฐ ์นธ๋ง๋ค ๋ฌผ์ ์์ ์ ์ฅํ๋ค.
์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์์ผ๋ฉด์ ์์ ํด์ผ ํ ์ ๋ณด๋ ํฌ๊ฒ ์์ 3๊ฐ์ง๋ก ์ ๋ฆฌํ ์ ์๋ค.
- ๊ตฌ๋ฆ์ ์ด๋
์์ด๊ฐ ๋ช ๋ น์ ๋ด๋ฆฌ๋ฉด ๊ตฌ๋ฆ์ d ๋ฐฉํฅ์ผ๋ก s๋งํผ ์ด๋ํ๋ค.
์ด๋ ๊ฒฉ์ํ์ 1๋ฒ ํ,์ด๊ณผ N๋ฒ ํ,์ด์ด ์ฐ๊ฒฐ๋์ด ์๊ธฐ๋๋ฌธ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ๋ ์๋ค.
๊ตฌ๋ฆ์ด ์ด๋ค ๋ฐฉํฅ์ผ๋ก N์นธ ์ด๋ํ ๊ฒฝ์ฐ ๊ฒฐ๊ตญ ์ ์๋ฆฌ๋ ๋์์จ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ S๊ฐ N๋ณด๋ค ํฐ ๊ฒฝ์ฐ
S %= N ์ ๊ณผ์ ์ ํตํด ์ด๋๊ฑฐ๋ฆฌ๋ฅผ ์ค์ผ ์ ์๋ค.
pair<int, int> now = Clouds[i];
now.first = now.first + dy[direction] * speed + N;
now.second = now.second + dx[direction] * speed + N;
if (now.first > N)
now.first %= N;
if (now.second > N)
now.second %= N;
if (now.first == 0)
now.first += N;
if (now.second == 0)
now.second += N;โ
๋๋ ๊ตฌ๋ฆ์ ์ด๋์ ์์ ๊ฐ์ด ๊ตฌํํ์๋ค.
๋ง์ฝ ๋ฐฉํฅ์ด - ๋ฐฉํฅ์ธ ๊ฒฝ์ฐ, ๋ฐฉํฅ * s ๋งํผ ์ด๋ ํ๋ฉด ์ขํ๊ฐ ์์๊ฐ ๋ ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํญ์ + N ์ ํด์ฃผ๋ฉด ์์์ธ ๊ฒฝ์ฐ๊ฐ ์์ด์ง๋ค.
๋์ %N์ ํ์ ๋ 0์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ 0์ 1์์ -๋ฐฉํฅ์ผ๋ก 1์นธ ์ด๋ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ค N๋ฒ ์นธ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ ๋๋ ์ด์ด 0์ธ ๊ฒฝ์ฐ์๋ N์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <math.h>
#include <queue>
#include <climits>
#include <deque>
#include <algorithm>
#include <iomanip>
#include <map>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> Priority_queue;
const int INF = INT_MAX;
const int MAX_N = 50 + 5;
int N, M;
int dx[] = { 0,-1,-1,0,1,1,1,0,-1 };
int dy[] = { 0,0,-1,-1,-1,0,1,1,1 };
int A[MAX_N][MAX_N];
bool visited[MAX_N][MAX_N];
vector<pair<int, int>> Clouds;
void Move_Cloud(int direction, int speed);
bool is_ok(pair<int, int> Position);
void Rain();
void Bug();
void Make_Cloud();
int get_water();
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N >> M;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
cin >> A[i][j];
//์ด๊ธฐ ๊ตฌ๋ฆ ์์ฑ
Clouds.push_back({ N,1 });
Clouds.push_back({ N,2 });
Clouds.push_back({ N - 1,1 });
Clouds.push_back({ N - 1,2 });
for (int i = 1; i <= M; i++) {
int d, s;
cin >> d >> s;
Move_Cloud(d, s);
Rain();
Bug();
Make_Cloud();
}
cout << get_water() << "\n";
return 0;
}
void Move_Cloud(int direction, int speed) {
speed %= N;
memset(visited, false, sizeof(visited));
for (int i = 0; i < Clouds.size(); i++) {
pair<int, int> now = Clouds[i];
now.first = now.first + dy[direction] * speed + N;
now.second = now.second + dx[direction] * speed + N;
if (now.first > N)
now.first %= N;
if (now.second > N)
now.second %= N;
if (now.first == 0)
now.first += N;
if (now.second == 0)
now.second += N;
Clouds[i] = now;
visited[now.first][now.second] = true;
}
}
void Rain() {
for (int i = 0; i < Clouds.size(); i++)
A[Clouds[i].first][Clouds[i].second]++;
}
bool is_ok(pair<int, int> Position) {
if (Position.first < 1 || Position.first > N || Position.second < 1 || Position.second > N)
return false;
return true;
}
void Bug() {
for (int i = 0; i < Clouds.size(); i++) {
pair<int, int> now = Clouds[i];
int cnt = 0;
for (int j = 2; j <= 8; j += 2) {
pair<int, int> next = { now.first + dy[j], now.second + dx[j] };
if (is_ok(next) && A[next.first][next.second] >= 1)
cnt++;
}
A[now.first][now.second] += cnt;
}
}
void Make_Cloud() {
Clouds.clear();
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if (A[i][j] >= 2 && !visited[i][j]) {
Clouds.push_back({ i,j });
A[i][j] -= 2;
}
}
}
memset(visited, false, sizeof(visited));
}
int get_water() {
int ret = 0;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
ret += A[i][j];
return ret;
}
|
cs |
๊ธฐ์กด์ ๋ด ์ฝ๋๊ฐ ๋ญ๊ฐ ์๋ชป๋๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ๊ตฌ๋ฆ์ ์ด๋์ํค๋ ๊ณผ์ ์์ ๋ญ๊ฐ ๋ฌธ์ ๊ฐ ์์๋ ๊ฒ๊ฐ๋ค. ์์ ๋ฌธ์ ๋ ๋ค ์ ์ถ๋ ฅ๋ผ์ ์ด๋์ ํ๋ ธ๋์ง ์ฐพ๊ธฐ๊ฐ ๋ ์ด๋ ค์ ๋ค.
'๋ฐฑ์ค > Gold' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 23288 : ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.06.03 |
---|---|
[BOJ] 21611 : ๋ง๋ฒ์ฌ ์์ด์ ๋ธ๋ฆฌ์๋ (0) | 2022.06.03 |
[BOJ] 21609 : ์์ด ์คํ๊ต (0) | 2022.06.02 |
[BOJ] 21608 : ์์ด ์ด๋ฑํ๊ต (0) | 2022.05.31 |
[BOJ] 20058 : ๋ง๋ฒ์ฌ ์์ด์ ํ์ด์ด์คํฐ (0) | 2022.05.31 |