๐ค๋ฌธ์ ์ดํด
์์ด๋ ์ฃผ์ด์ง ์๋์ ๋ฐฉํฅ์ผ๋ก 1์ด๋ง๋ค ์ด๋ํ๊ณ , ๊ฐ์ ์์น์ ๋๋ง๋ฆฌ ์ด์์ด ์ด๋๋ ๊ฒฝ์ฐ ์ฌ์ด์ฆ๊ฐ ํฐ ์์ด๋ง ๋จ๊ฒ ๋๋ค.
๋์์๋ 1์ด๋ง๋ค ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํด ๋์์์ด ์์นํ ์ด์ ์๋ ์์ด ์ค ๊ฐ์ฅ ์์ ์๋ ์์ด๋ง ์ก์ ์ฌ๋ฆฌ๊ณ ์ก์ ์์ด์ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ ํฉํ ๊ฐ์ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
๋จ์ํ๊ฒ ๊ตฌํํ๋ ๋ฌธ์ ์ธ๋ฐ ์๊ฐ์ด ์ ๊ฒ ๊ฑธ๋ฆฌ๊ฒ ํ๊ธฐ ์ํด์๋ ์์ด๋ฅผ ์ด๋์ํฌ ๋ ๊ฒฉ์ํ์ ๊ฒฝ๊ณ๋ฅผ ๋ง๋ฌ์ ๋๋ง๋ค ๋ฐฉํฅ์ ๋ฐ๊พธ๋๊ฒ ์๋ ํ๋ฒ์ ์ฎ๊ธฐ๋ ์์ ์ธ์์ผ ํ๋ค๊ณ ์๊ฐํ๋ค. ์ฌ๋ฌ ๊ฒฝ์ฐ๋ฅผ ์๋ฎฌ๋ ์ด์ ํด๋ณด๊ณ ์์ ์ธ์ ๋ค.
๐ฅํ์ด๐ฅ
๊ฒฉ์ํ์ ํฌ๊ธฐ๋ฅผ ๋์ด๊ฐ๋ค๋ฉด ์ฒ์ ๋์ด๊ฐ๊ณ ๊ทธ ์ดํ๋ถํฐ๋ (๊ฒฉ์ํ ํฌ๊ธฐ-1)๋ก ๋๋ ๋๋จธ์ง๊ฐ ๊ท์น์ ์ผ๋ก 0, 1, ... (๊ฒฉ์ํ ํฌ๊ธฐ -1) , ...,1, 0์ด ๋๊ฒ ํด์ฃผ์๋ค.
๊ฒฉ์ํ์์ +๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ ์์ด(์๋์ชฝ, ์์ชฝ)๋
ํ์ฌ ์์น์์ ์๋๋ฅผ ๋ํ์ ๋ ๊ฒฉ์ํ์ ํฌ๊ธฐ(์๋์ชฝ-C, ์์ชฝ-R)๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๋จ์ํ ๋ํ๊ธฐ๋ง ํด์ฃผ๊ณ , ๊ฐ์ ๋ ๋ฐฉํฅ๋ ๋ฐ๊ฟ์ค๋ค.
๊ฒฉ์ํ์ ๋์ด๊ฐ๋ฉด ์ ๊ท์น์ ๋ง๊ฒ ์๋ก์ด ์๋ ๊ฐ์ ๊ธฐ์กด ์๋ + (๊ฒฉ์ ํฌ๊ธฐ- (๊ฒฉ์ ํฌ๊ธฐ - ํ์ฌ ์์น + 1))๋ก ๋ฐ๊ฟ์ค๋ค.
๋ฐ๊พผ ์๋๊ฐ์ (๊ฒฉ์ํฌ๊ธฐ -1)๋ก ๋๋ ๋๋จธ์ง๊ฐ ํ์๋ฉด ๋ฐฉํฅ์ด ๋ฐ๋, ์์น๋ ๊ฒฉ์ ํฌ๊ธฐ - ( ์ ์๋ % (๊ฒฉ์ ํฌ๊ธฐ-1) )์ด ๋๋ค.
๋ฐ๊พผ ์๋๊ฐ์ (๊ฒฉ์ํฌ๊ธฐ -1)๋ก ๋๋ ๋๋จธ์ง๊ฐ ์ง์๋ฉด ๋ฐฉํฅ์ ๊ทธ๋๋ก, ์์น๋ ์ ์๋ % (๊ฒฉ์ํฌ๊ธฐ -1) +1 ์ด ๋๋ค.
๊ฒฉ์ํ์์ -๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ ์์ด(์ผ์ชฝ, ์๋์ชฝ)๋
ํ์ฌ ์์น์์ ์๋๋ฅผ ๋บ์ ๋ ๊ฒฉ์ํ์ ํฌ๊ธฐ(์ผ์ชฝ-C, ์๋์ชฝ-R)๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๋จ์ํ ๋นผ์ฃผ๊ธฐ๋ง ํ๊ณ , ๊ฐ์ ๋ ๋ฐฉํฅ๋ ๋ฐ๊ฟ์ค๋ค.
๊ฒฉ์ํ์ ๋์ด๊ฐ๋ฉด ์ ๊ท์น์ ๋ง๊ฒ ์๋ก์ด ์๋ ๊ฐ์ ๊ธฐ์กด ์๋ + ((๊ฒฉ์ํฌ๊ธฐ-1) - ํ์ฌ์์น)๋ก ๋ฐ๊ฟ์ค๋ค.
๋ฐ๊พผ ์๋๊ฐ์ (๊ฒฉ์ํฌ๊ธฐ-1)๋ก ๋๋ ๋๋จธ์ง๊ฐ ํ์๋ฉด ๋ฐฉํฅ์ด ๋ฐ๋, ์์น๋ ์ ์๋ % (๊ฒฉ์ํฌ๊ธฐ -1) +2์ด ๋๋ค.
๋ฐ๊พผ ์๋๊ฐ์ (๊ฒฉ์ํฌ๊ธฐ-1)๋ก ๋๋ ๋๋จธ์ง๊ฐ ์ง์๋ฉด ๋ฐฉํฅ์ ๊ทธ๋๋ก, ์์น๋ (๊ฒฉ์ ํฌ๊ธฐ-1) - (์ ์๋ % (๊ฒฉ์ํฌ๊ธฐ-1))์ด ๋๋ค.
์ด๋ํ ์์ด์ ์์น๋ tmp๋ผ๋ ์์ ๋ฐฐ์ด์ ์ ์ฅํด์ฃผ๊ณ ์ด๋ํ tmp์ ์์น์ ์ด๋ฏธ ์์ด๊ฐ ์๋ค๋ฉด ํฌ๊ธฐ๋ฅผ ๋น๊ตํด ํฐ ๊ฒ๋ง ๋จ๊ฒ ํด์ค๋ค.
๋ค ์ด๋์ํจ ๋ค์ tmp๋ฅผ ๊ธฐ์กด ๋ฐฐ์ด์ ์ฎ๊ฒจ์ฃผ๊ณ tmp๋ ์ด๊ธฐํํด์ค๋ค.
๋งค ์ด๋ง๋ค ๋์๊พผ์ด ์์นํ ์ด์ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ ์์ด๋ฅผ ์ก๊ณ ๊ทธ ํฌ๊ธฐ๋ฅผ ๋ค ๋ํด์ฃผ๋ฉด ๋!
์ค๋ช ์ด ๋ค์ ๋ณต์กํ ์ ์์ง๋ง ์ด๋ ํ ์์น์ ์๋ ์์ด๋ฅผ ์ฌ๋ฌ ์๋๋ก ์ด๋์ํฌ ๋ ์ ๋ฐฉ์์ ์ ์ฉํด๋ณด๋ฉด ์ด๋ค ๋๋์ธ์ง ์๊ฒ ๋ ๊ฑฐ๋ค.
โํธ๋ฌ๋ธ ์ํ
๊ฐ ๋ฐฉํฅ๋ง๋ค ๊ฒฉ์ํ์ ํฌ๊ธฐ์ ์์ด์ ์์น๋ฅผ ๊ณ์ฐํ ๋ ํ์ํ ์ขํ๊ฐ ํ๋๊ฐ ๋ค๋ฅธ ์ ์ ์๊ฐํ์ง ๋ชปํ๋ค. +๋ฐฉํฅ๊ณผ -๋ฐฉํฅ๋ผ๋ฆฌ ๋์์ด ๊ฐ๋ค๊ณ ํด์ ๋ณต๋ถ๋ง ํ๋๊ฒ ์ค์์๊ณ , ์ ๋ ฅ๋ฐ์ ๋ณ์ ์ค์ ๊ฒฉ์ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ R,C์ ์์ด์ ์์น๋ฅผ ๋ํ๋ด๋ r,c๋ ํท๊ฐ๋ ธ์๋ค. ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ์ ๋ ฅ ๋ถ๋ถ์ ๋ฏธ๋ฆฌ ์ง๋๊ณ ์์ด ์ด๋ ์์ ์ธ์ฐ๋ค๋ณด๋ ๊น๋จน์ ๊ฑฐ ๊ฐ๋ค..ใ
#include <iostream>
#include <cstring>
using namespace std;
int R, C, M;
int r, c, s, d, z;
pair<int, pair<int, int>> map[102][102]; //์๋ ฅ, ์ด๋๋ฐฉํฅ, ํฌ๊ธฐ
pair<int, pair<int, int>> tmp[102][102];
int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> R >> C >> M;
for (int i = 0; i < M; i++) {
cin >> r >> c >> s >> d >> z;
map[r][c] = {s, {d, z}};
}
int cnt = 0;
for (int k = 1; k <= C; k++) {
for (int i = 1; i <= R; i++) {
if (map[i][k].second.first == 0) continue;
else {
map[i][k].second.first = 0;
cnt += map[i][k].second.second;
break;
}
}
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= C; j++) {
int y = i;
int x = j;
int speed = map[i][j].first;
int direct = map[i][j].second.first;
int size = map[i][j].second.second;
if (direct == 0) continue;
switch (direct) {
case 1:
if ((y - speed) > 1) {
y = y - speed;
} else if ((y - speed) == 1) {
y = y - speed;
direct = 2;
} else {
int ny = speed + ((R - 1) - y);
if (ny / (R - 1) % 2 == 1) {
direct = 2;
y = ny % (R - 1) + 2;
} else {
y = (R - 1) - (ny % (R - 1));
}
}
if (tmp[y][x].second.second != 0) {
if (tmp[y][x].second.second < size) {
tmp[y][x] = {speed, {direct, size}};
}
} else {
tmp[y][x] = {speed, {direct, size}};
}
break;
case 2:
if ((y + speed) < R) {
y = y + speed;
} else if ((y + speed) == R) {
y = y + speed;
direct = 1;
} else {
int ny = speed + (R - (R - y + 1));
if (ny / (R - 1) % 2 == 1) {
direct = 1;
y = R - (ny % (R - 1));
} else {
y = (ny % (R - 1)) + 1;
}
}
if (tmp[y][x].second.second != 0) {
if (tmp[y][x].second.second < size) {
tmp[y][x] = {speed, {direct, size}};
}
} else {
tmp[y][x] = {speed, {direct, size}};
}
break;
case 3:
if ((x + speed) < C) {
x = x + speed;
} else if ((x + speed) == C) {
x = x + speed;
direct = 4;
} else {
int nx = speed + (C - (C - x + 1));
if (nx / (C - 1) % 2 == 1) {
direct = 4;
x = C - (nx % (C - 1));
} else {
x = (nx % (C - 1)) + 1;
}
}
if (tmp[y][x].second.second != 0) {
if (tmp[y][x].second.second < size) {
tmp[y][x] = {speed, {direct, size}};
}
} else {
tmp[y][x] = {speed, {direct, size}};
}
break;
case 4:
if ((x - speed) > 1) {
x = x - speed;
} else if ((x - speed) == 1) {
x = x - speed;
direct = 3;
} else {
int nx = speed + ((C - 1) - x);
if (nx / (C - 1) % 2 == 1) {
direct = 3;
x = nx % (C - 1) + 2;
} else {
x = (C - 1) - (nx % (C - 1));
}
}
if (tmp[y][x].second.second != 0) {
if (tmp[y][x].second.second < size) {
tmp[y][x] = {speed, {direct, size}};
}
} else {
tmp[y][x] = {speed, {direct, size}};
}
break;
}
}
}
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= C; j++) {
map[i][j] = tmp[i][j];
}
}
memset(tmp, 0, sizeof(tmp));
}
cout << cnt;
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 2239๋ฒ ์ค๋์ฟ (0) | 2022.08.11 |
---|---|
[๋ฐฑ์ค/C++] 1043๋ฒ ๊ฑฐ์ง๋ง (0) | 2022.07.26 |
[๋ฐฑ์ค/C++] 1766๋ฒ ๋ฌธ์ ์ง (0) | 2022.07.21 |
[๋ฐฑ์ค/C++] 13398๋ฒ ์ฐ์ํฉ 2 (0) | 2022.07.20 |
[๋ฐฑ์ค/C++] 11054๋ฒ ๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (0) | 2022.07.20 |