ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 낚시왕
    백준알고리즘 2019. 8. 1. 05:43
    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    struct shark {
        int r;
        int c;
        int s;//속도
        int d;//방향 1 위 2 아래 3 오른쪽, 4 왼쪽임
        int z;//크기
        bool life = true;
        shark(int q, int w, int speed, int t, int y) {
            r = q;
            c = w;
            s = speed;
            d = t;
            z = y;
        }
    };
    
    int ans;
    
    vector<shark> v[101];
    
    int r, c,m;
    void check(int al) {
        for (int i = 0; i < v[al].size(); i++) {
            if (v[al][i].z == 0) continue;
            int max = v[al][i].z;
            vector<int> index;
            index.push_back(i);
            for (int j = i + 1; j < v[al].size(); j++) {
                if (v[al][i].r == v[al][j].r && v[al][i].c == v[al][j].c) {
                    if (max < v[al][j].z) {
                        max = v[al][j].z;
                    }
                    index.push_back(j);
                }
            }
            for (int j = 0; j < index.size(); j++) {
                if (v[al][index[j]].z < max) {
                    v[al][index[j]].z = 0;
                    v[al][index[j]].life = false;
    
                }
            }
        }
        for (int j = 0; j < v[al].size(); j++) {
            if (v[al][j].life == true) {
                v[al + 1].push_back(v[al][j]);
            }
        }
    }
    
    void move(int al) {
        for (int j = 0; j < v[al].size(); j++) {
            if (v[al][j].z == 0) continue;
            for (int i = 1; i <= v[al][j].s; i++) {
    
                if (v[al][j].d == 1) {
                    v[al][j].r -= 1;
                    if (v[al][j].r == 0)
                    {
                        v[al][j].d = 2;
                        v[al][j].r = 1;
                        v[al][j].r += 1;
    
                    }
                }
                else if (v[al][j].d == 2) {
                    v[al][j].r += 1;
                    if (v[al][j].r == r + 1) {
                        v[al][j].d = 1;
                        v[al][j].r = r;
                        v[al][j].r -= 1;
    
                    }
                }
                else if (v[al][j].d == 3) {
                    v[al][j].c += 1;
                    if (v[al][j].c == c + 1) {
                        v[al][j].d = 4;
                        v[al][j].c = c;
                        v[al][j].c -= 1;
                    }
                }
                else if (v[al][j].d == 4) {
                    v[al][j].c -= 1;
                    if (v[al][j].c == 0) {
                        v[al][j].d = 3;
                        v[al][j].c = 1;
                        v[al][j].c += 1;
                    }
                }
    
            }
        }
    }
    
    void naksi(int al) {
        int x = 10000; int y = 0;
        bool f = false;
        for (int i = 0; i < v[al-1].size(); i++) {
            if (v[al - 1][i].c == al) {
                f = true;
                if (x > v[al - 1][i].r)
                {
                    x = v[al - 1][i].r;
                    y = i;
                }
            }
        }
        if(f) {
            ans += v[al-1][y].z;
            v[al - 1][y].z = 0;
            v[al-1][y].life = false;
        }
    }
    
    int main() {
        cin >> r >> c >> m;
    
        for (int i = 0; i < m; i++) {
            int r, c, s, d, z;
            cin >> r >> c >> s >> d >> z;
            v[0].push_back(shark(r, c, s, d, z));
        }
        for (int i = 0; i < c; i++) {
            if(v[i].size() == 0) break;
            naksi(i + 1);
            move(i);
            check(i);
        }
        cout<<ans<<endl;
        return 0;
    }

    전형적인 삼성스러운 시뮬레이션문제?

    난이도는 하..

    속도제한이 생긴다면 많이어려워질지도모르겠다

    움직임 함수 + 낚시함수 + 잡아먹히는거 체크함수 + 메인 끝..

    '백준알고리즘' 카테고리의 다른 글

    경사로  (0) 2019.08.02
    미로탐색  (0) 2019.08.01
    2048 (Easy)  (0) 2019.07.31
    알파벳  (0) 2019.07.31
    N-Queen  (0) 2019.07.30

    댓글

Designed by Tistory.