๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์ค€/Gold

[BOJ] 17143 : ๋‚š์‹œ์™•

by Jaeguk 2022. 5. 11.
๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/17143

 

17143๋ฒˆ: ๋‚š์‹œ์™•

๋‚š์‹œ์™•์ด ์ƒ์–ด ๋‚š์‹œ๋ฅผ ํ•˜๋Š” ๊ณณ์€ ํฌ๊ธฐ๊ฐ€ R×C์ธ ๊ฒฉ์žํŒ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฉ์žํŒ์˜ ๊ฐ ์นธ์€ (r, c)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. r์€ ํ–‰, c๋Š” ์—ด์ด๊ณ , (R, C)๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์— ์žˆ๋Š” ์นธ์ด๋‹ค.

www.acmicpc.net

๊ฐ ์ƒ์–ด์˜ ์œ„์น˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ตฌํ˜„ ๋ฌธ์ œ.

 

ํ’€์ด

 ๋‚š์‹œ์™•์€ ์ฒ˜์Œ์— 1๋ฒˆ ์—ด๋ณด๋‹ค ํ•œ ์นธ ์™ผ์ชฝ์— ์žˆ๋‹ค. ์ฆ‰ 0๋ฒˆ์—ด์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋‚š์‹œ์™•์€ ๋•…์—๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ–‰์€ ํ•ญ์ƒ 0๋ฒˆํ–‰์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. (0, 0) ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ํ•˜๋ฉด์„œ ๋‚š์‹œ๋ฅผ ํ•œ๋‹ค. ๋‚š์‹œ์™•์ด ํ•œ ์นธ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ์ƒ์–ด๋“ค๋„ ์†๋„์— ๋”ฐ๋ผ ์ด๋™ํ•œ๋‹ค.

1. ๋‚š์‹œ์™•์ด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•œ๋‹ค.

 ์ด๊ฑด ๊ทธ๋ƒฅ ๋‚š์‹œ์™•์˜ x์ขŒํ‘œ๋ฅผ +1 ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

2. ๋‚š์‹œ์™•์ด ์žˆ๋Š” ์—ด์— ์žˆ๋Š” ์ƒ์–ด ์ค‘์—์„œ ๋•…๊ณผ ์ œ์ผ ๊ฐ€๊นŒ์šด ์ƒ์–ด๋ฅผ ์žก๋Š”๋‹ค. ์ƒ์–ด๋ฅผ ์žก์œผ๋ฉด ๊ฒฉ์žํŒ์—์„œ ์žก์€ ์ƒ์–ด๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

 ๋‚š์‹œ์™•์ด ์žˆ๋Š” ์ขŒํ‘œ์—์„œ x์ขŒํ‘œ๋Š” ๊ณ ์ •ํ•œ ์ฑ„ y์ขŒํ‘œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋Š˜๋ ค๊ฐ€๋ฉฐ ๋ฌผ์†์œผ๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค. ์ฒ˜์Œ์œผ๋กœ ๋งŒ๋‚œ ์ƒ์–ด๊ฐ€ ๋•…์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ƒ์–ด์ด๋‹ค. ์ด ์ƒ์–ด์˜ ํฌ๊ธฐ๋ฅผ ์žก์€ ์ƒ์–ด ํฌ๊ธฐ์˜ ํ•ฉ(ans)์— ๋”ํ•ด์ฃผ๊ณ  ์ด ์ƒ์–ด๋Š” ๋ฒกํ„ฐ์—์„œ ์‚ญ์ œํ•œ๋‹ค.

3. ์ƒ์–ด๊ฐ€ ์ด๋™ํ•œ๋‹ค.

 ์ด ๋ฌธ์ œ์˜ ๊ด€๊ฑด์€ ์ƒ์–ด์˜ ์ด๋™์ธ ๊ฒƒ ๊ฐ™๋‹ค.

์ƒ์–ด๋งˆ๋‹ค ์ผ์ •ํ•œ ์†๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒ์–ด๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜ ์ด๋™ํ•˜๋ ค๊ณ ํ•˜๋ฉด(๋ฒฝ์— ๋ฐ•์œผ๋ฉด) ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์„œ ํ•œ ์นธ ์ด๋™ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ƒ์–ด๋ฅผ ํ•œ ์นธ ํ•œ ์นธ ์ด๋™์‹œํ‚ค๊ธฐ์—๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค.

์ƒ์–ด์˜ ์†๋ ฅ์€ 1์ดˆ ๋™์•ˆ ์ƒ์–ด๊ฐ€ "์ด๋™ํ•ด์•ผํ•  ๊ฑฐ๋ฆฌ"์™€ ๊ฐ™๋‹ค.

์ด๋™ํ•ด์•ผํ•  ๊ฑฐ๋ฆฌ(distance)๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ์ƒ์–ด๋Š” ์ด๋™ํ•œ๋‹ค.

์ž„์˜์˜ ์ƒ์–ด๊ฐ€ ํ˜„์žฌ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๊ณ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด ์ƒ์–ด๋Š” ์˜ค๋ฅธ์ชฝ ๋˜๋Š” ์™ผ์ชฝ์œผ๋กœ๋งŒ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— y์ขŒํ‘œ๋Š” ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

ํ˜„์žฌ ์ด ์ƒ์–ด๊ฐ€ x์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ƒ์–ด๊ฐ€ (C - x)๋งŒํผ ์ด๋™ํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ ๋ฒฝ์— ๋ฐ•๊ฒŒ๋œ๋‹ค. ๋‚จ์•„์žˆ๋Š” ์ด๋™ํ•ด์•ผ ํ•  ๊ฑฐ๋ฆฌ๊ฐ€ (C - x) ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด ์ด ์ƒ์–ด๋ฅผ C(์˜ค๋ฅธ์ชฝ ์ ค ๋)๋กœ ์ด๋™์‹œํ‚ค๊ณ  ๋ฐฉํ–ฅ์„ ๋ฐ”๊พผ๋‹ค. ์ด๋™ ํ›„ ๋‚จ์€ ๊ฑฐ๋ฆฌ๋Š” ์›๋ž˜ ๋‚จ์•„์žˆ๋˜ ์ด๋™๊ฑฐ๋ฆฌ - (C - x)๊ฐ€ ๋œ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์ƒ์–ด๊ฐ€ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ํ˜„์žฌ ์ƒ์–ด์˜ ์œ„์น˜๊ฐ€ x๋ฉด (x - 1)๋งŒํผ ์ด๋™ํ•˜๋ฉด ์™ผ์ชฝ ๋ฒฝ์— ๋ฐ•๊ฒŒ๋œ๋‹ค.

๋‚จ์€ ์ด๋™ํ•ด์•ผํ•  ๊ฑฐ๋ฆฌ๊ฐ€ (x - 1)๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด ์ด ์ƒ์–ด๋ฅผ 1(์™ผ์ชฝ ์ ค ๋)๋กœ ์ด๋™์‹œํ‚ค๊ณ  ๋ฐฉํ–ฅ์„ ๋ฐ”๊พผ๋‹ค.

๋งŒ์•ฝ ์ด๋™ํ•ด์•ผํ•  ๊ฑฐ๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ด๋™ํ•ด๋„ ๋ฒฝ์— ๋ฐ•์ง€์•Š์œผ๋ฉด ์ƒ์–ด๋ฅผ ๋‚จ์€ ๊ฑฐ๋ฆฌ๋งŒํผ ์ด๋™์‹œํ‚จ ํ›„, ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„ ์ด๋™์„ ์ข…๋ฃŒํ•œ๋‹ค.

 ์ƒ์–ด๊ฐ€ ์œ„์•„๋ž˜๋กœ ์›€์ง์ด๊ณ  ์žˆ์„ ๋•Œ๋„ ๋˜‘๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋•Œ๋Š” x์ขŒํ‘œ๋ฅผ ๊ณ ์ •ํ•œ์ฑ„ y์ขŒํ‘œ๋งŒ ์ด๋™์‹œํ‚จ๋‹ค.

 ๋ชจ๋“  ์ƒ์–ด๋ฅผ ์ด๋™์‹œํ‚จ ํ›„์— ํ•œ ์นธ์— ์—ฌ๋Ÿฌ๋งˆ๋ฆฌ์˜ ์ƒ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด ์ƒ์–ด๋“ค์„ ํฌ๊ธฐ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ ์ œ์ผ ํฐ ์ƒ์–ด๋งŒ ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€ ์ž‘์€ ์ƒ์–ด๋“ค์€ ์‚ญ์ œํ•œ๋‹ค.

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
66
67
68
69
70
71
72
73
#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 <algorithm>
#include <iomanip>
#include <map>
#define mod 998244353
using namespace std;
typedef long long ll;
typedef priority_queue<pair<intint>vector<pair<intint>>, greater<pair<intint>>> Priority_queue;
const int INF = INT_MAX;
const int MAX_N = 100 + 5;
vector<pair<intpair<intint>>> Shark[MAX_N][MAX_N];
int R, C, M;
int ans;
 
void Catch_Shark(int st) {
    for (int i = 1; i <= R; i++) {
        if (!Shark[i][st].empty()) {
            ans += Shark[i][st][0].first;
            Shark[i][st].clear();
            return;
        }
    }
}
 
void change_direct(int &direction) {
    if (direction == 1)
        direction = 2;
    else if (direction == 2)
        direction = 1;
    else if (direction == 3)
        direction = 4;
    else if (direction == 4)
        direction = 3;
}
 
void Shark_Move() {
    vector<pair<intpair<intint>>> temp[MAX_N][MAX_N];
    for (int i = 1; i <= R; i++) {
        for (int j = 1; j <= C; j++) {
            if (Shark[i][j].empty())
                continue;
            int size = Shark[i][j][0].first;
            int Pace = Shark[i][j][0].second.first;
            int distance = Pace;
            int direction = Shark[i][j][0].second.second;
            if (direction == 1 || direction == 2) {
                int now = i;
                while (distance) {
                    if (direction == 1) { //์œ„๋กœ ๊ฐ€๋Š”์ค‘
                        if (distance >= (now - 1)) {
                            distance -= (now - 1);
                            now = 1;
                            change_direct(direction);
                        }
                        else {
                            now -= distance;
                            distance = 0;
                        }
                        continue;
                    }
                    else if (direction == 2) { // ๋‚ด๋ ค๊ฐ€๋Š” ์ค‘ 
                        if (distance >= R - now) {
                            distance -= (R - now);
                            now = R;
                            change_direct(direction);
                        }
                        else {
                            now += distance;
                            distance = 0;
                        }
                    }
                }
                temp[now][j].push_back({ size,{Pace, direction} });
            }
            else if (direction == 3 || direction == 4) {
                int now = j;
                while (distance) {
                    if (direction == 3) { //์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฐ€๋Š” ์ค‘
                        if (distance >= (C - now)) {
                            distance -= (C - now);
                            now = C;
                            change_direct(direction);
                        }
                        else {
                            now += distance;
                            distance = 0;
                        }
                    }
                    else if (direction == 4) { //์™ผ์ชฝ์œผ๋กœ ๊ฐ€๋Š” ์ค‘
                        if (distance >= (now - 1)) {
                            distance -= (now - 1);
                            now = 1;
                            change_direct(direction);
                        }
                        else {
                            now -= distance;
                            distance = 0;
                        }
                    }
                }
                temp[i][now].push_back({ size ,{Pace, direction} });
            }
        }
    }
 
    for (int i = 1; i <= R; i++) {
        for (int j = 1; j <= C; j++) {
            Shark[i][j].clear();
            if (temp[i][j].empty()) {
                continue;
            }
            else if (temp[i][j].size() == 1) {
                Shark[i][j] = temp[i][j];
            }
            else {
                sort(temp[i][j].begin(), temp[i][j].end(), greater<pair<int,pair<int,int>>>());
                pair<intpair<intint>> copy = temp[i][j][0];
                Shark[i][j].push_back(copy);
            }
        }
    }
}
 
int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> R >> C >> M;
    for (int i = 0; i < M; i++) {
        int r, c, s, d, z;
        cin >> r >> c >> s >> d >> z;
        Shark[r][c].push_back({ z,{s,d} });
    }
    int Fishing_King_col = 0;
    while (Fishing_King_col <= C) {
        Fishing_King_col++;
        Catch_Shark(Fishing_King_col);
        Shark_Move();
    }
    cout << ans << "\n";
    return 0;
}
cs

728x90

'๋ฐฑ์ค€ > Gold' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] 17142 : ์—ฐ๊ตฌ์†Œ 3  (0) 2022.05.17
[BOJ] 11758 : CCW  (0) 2022.05.12
[BOJ] 17144 : ๋ฏธ์„ธ๋จผ์ง€ ์•ˆ๋…•!  (0) 2022.05.11
[BOJ] 16235 : ๋‚˜๋ฌด ์žฌํ…Œํฌ  (0) 2022.05.11
[BOJ] 16234 : ์ธ๊ตฌ ์ด๋™  (0) 2022.05.10