Skip to content

Latest commit

ย 

History

History
134 lines (113 loc) ยท 3.21 KB

File metadata and controls

134 lines (113 loc) ยท 3.21 KB
DONE_DATE 2025/02/01

AC

๋‚œ์ด๋„

  • ๊ณจ๋“œ 5

๋ฌธ์ œ

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

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

  • ๊ตฌํ˜„
  • ์ž๋ฃŒ ๊ตฌ์กฐ
  • ๋ฌธ์ž์—ด
  • ํŒŒ์‹ฑ
  • ๋ฑ

ํšŒ๊ณ 

  • ์–ด๋ ต์ง€ ์•Š๋‹ค. ๊ตฌํ˜„ ๋ฌธ์ œ๋‹ต๋‹ค.
  • ๋ฐฐ์—ด ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋งŒ๋“œ๋Š” ๊ฒŒ ์–ด๋ ค์› ๋‹ค. substr์„ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.arrayString.substr(1, arrayString.size() - 2); ๋งจ ์•ž๋ฌธ์ž์—ด๊ณผ ๋งจ ๋’ค ๋ฌธ์ž์—ด์„ ๋‚ ๋ฆฐ๋‹ค.
  • ํ˜น์€ s.erase(s.begin()); s.pop_back(); ์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.
        istringstream iss(arrayString);
        string temp;
        while (getline(iss, temp, ',')) {
            dq.push_back(stoi(temp));
        }
  • ์ด๊ฑด , ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. getline(iss, temp, ',') ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋ช…๋ น์–ด๋ฅผ ํ•ด์„ํ•˜๋Š” ๋ถ€๋ถ„์€ ๊ฐ„๋‹จํ•˜๋‹ค. D๋ฉด pop_front, R์ด๋ฉด ๋’ค์ง‘๋Š”๋‹ค.
  • ๋’ค์ง‘๋Š” ๊ฒƒ๋„ ์‹ค์ œ๋กœ ๋’ค์ง‘์ง€ ์•Š๊ณ  ๋ฐฉํ–ฅ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค. isForward = !isForward;
  • isForward์— ๋”ฐ๋ผ์„œ pop_front, pop_back์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  • ์ถœ๋ ฅํ•  ๋•Œ๋Š” isForward์— ๋”ฐ๋ผ ์ถœ๋ ฅ์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
for(auto i : dq) {
    if(!first) {
        cout << ",";
    }
    cout << i;
    first = false;
}
  • ์ฒ˜์Œ์—๋Š” ๊ทธ๋ƒฅ ์ถœ๋ ฅํ•œ ํ›„ ๋ฐฑ์ŠคํŽ˜์ด์Šค(\b) ๋ฅผ ํ†ตํ•ด์„œ ์ง€์šฐ๋Š” ๊ฑธ๋กœ ํ–ˆ๋Š”๋ฐ ๊ทธ๋Ÿฌ๋ฉด 1 D 1 [42]
  • ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. first๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ถœ๋ ฅ์„ ์ œ์–ดํ•˜์ž.

์ „์ฒด์ฝ”๋“œ

#include <bits/stdc++.h>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int T;
    cin >> T;

    string cmd;
    int n;
    string arrayString;
    deque<int> dq;

    while (T--) {
        cin >> cmd;
        cin >> n;
        cin >> arrayString;
        bool isForward = true; // right or left
        bool errorFlag = false;

        arrayString = arrayString.substr(1, arrayString.size() - 2);
        istringstream iss(arrayString);
        string temp;
        while (getline(iss, temp, ',')) {
            dq.push_back(stoi(temp));
        }

        for (auto c: cmd) {
            if (c == 'D') {
                if (dq.empty()) {
                    cout << "error" << '\n';
                    errorFlag = true;
                    break;
                }

                if (isForward) {
                    dq.pop_front();
                } else {
                    dq.pop_back();
                }
            } else { // c == 'R'
                isForward = !isForward;
            }
        }

        if (!errorFlag) {
            cout << "[";
            bool first = true;
            if(isForward) {
                for(auto i : dq) {
                    if(!first) {
                        cout << ",";
                    }
                    cout << i;
                    first = false;
                }
            } else {
                reverse(dq.begin(), dq.end());
                for(auto i : dq) {
                    if(!first) {
                        cout << ",";
                    }
                    cout << i;
                    first = false;
                }
            }
            cout << "]\n";
        }
        dq.clear();
    }
}