[c++] BOJ 5430 :: AC

๋ฌธ์ œ

AC ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์„ ์˜์ด๋Š” ์ฃผ๋ง์— ํ•  ์ผ์ด ์—†์–ด์„œ ์ƒˆ๋กœ์šด ์–ธ์–ด AC๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. AC๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด์— ์—ฐ์‚ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ์–ธ์–ด์ด๋‹ค. ์ด ์–ธ์–ด์—๋Š” ๋‘ ๊ฐ€์ง€ ํ•จ์ˆ˜ R(๋’ค์ง‘๊ธฐ)๊ณผ D(๋ฒ„๋ฆฌ๊ธฐ)๊ฐ€ ์žˆ๋‹ค.

ํ•จ์ˆ˜ R์€ ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆซ์ž์˜ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘๋Š” ํ•จ์ˆ˜์ด๊ณ , D๋Š” ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š”๋ฐ D๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•จ์ˆ˜๋Š” ์กฐํ•ฉํ•ด์„œ ํ•œ ๋ฒˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "AB"๋Š” A๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ์— ๋ฐ”๋กœ ์ด์–ด์„œ B๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "RDD"๋Š” ๋ฐฐ์—ด์„ ๋’ค์ง‘์€ ๋‹ค์Œ ์ฒ˜์Œ ๋‘ ์ˆซ์ž๋ฅผ ๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’๊ณผ ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

ํ’€์ด

  • ๊ทธ๋ƒฅ ๊ตฌํ˜„ ๋ฌธ์ œ
  • string ํ•จ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ•œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ•ด์„œ ํ’€๊ธฐ
  • ๋งจ ์•ž, ๋’ค์—์„œ๋งŒ ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚  ๊ฒฝ์šฐ vector๋ณด๋‹ค deque๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฆ„

 

์ฝ”๋“œ

#include <iostream>
#include <string>
#include <deque> // vector ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ
#include <algorithm>

using namespace std;

bool handleFunction(deque<int>& arr, char type, bool& isReversed) {
    switch (type) {
    case 'R':
        isReversed = !isReversed;
        break;
    case 'D':
        if (arr.size() < 1) {
            cout << "error\n";
            return false;
        }
        else {
            if (isReversed) {
                arr.pop_back();
            }
            else {
                arr.pop_front();
            }
        }
    }
    return true;
}

void printArr(deque<int>& arr, bool& isReversed) {
    cout << "[";
    if (arr.size() < 1) {
        cout << "]\n"; return;
    }
    if (isReversed) {
        cout << arr.back();
        arr.pop_back();
        while (!arr.empty()) {
            cout << "," << arr.back();
            arr.pop_back();
        }
    }
    else {
        cout << arr.front();
        arr.pop_front();
        while (!arr.empty()) {
            cout << "," << arr.front();
            arr.pop_front();
        }
    }
    cout << "]\n";
}

void fetchArr(string& str, deque<int>& arr) {
    if (str.size() == 2) return; // []
    if (str.size() == 3) { // [n]
        arr.push_back(str[1] - '0'); return;
    }
    // find, substr ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ

    string num = "";
    for (int i = 1; i < str.size(); i++) {
        if ('0' <= str[i] && str[i] <= '9') {
            num += str[i];
        }
        else {
            arr.push_back(stoi(num));
            num = "";
        }
    }
}

int main() {
    // ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š”๋ฐ D => ์—๋Ÿฌ
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int T; cin >> T;
    while (T--) {
        string func; cin >> func;
        int num; cin >> num;

        string arrString; cin >> arrString;
        deque<int> arr;
        fetchArr(arrString, arr);

        bool result = true;
        bool isReversed = false; // reverse๋ฅผ ๋ณ€์ˆ˜ํ™”
        for (int i = 0; i < func.length(); i++) {
            result = handleFunction(arr, func[i], isReversed);
            if (!result) break;
        }

        if (result) {
            printArr(arr, isReversed);
        }
    }
}

 

๊ฒฐ๊ณผ

์•„์ด๋”” ๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„ ์ฝ”๋“œ ๊ธธ์ด
gmldms784 3080 52 1693
๋ฐ˜์‘ํ˜•