๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

[C++/BOJ] 5430 : AC (์ž๋ฃŒ๊ตฌ์กฐ)

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

 

๋ฌธ์ œ

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

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

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

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

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. T๋Š” ์ตœ๋Œ€ 100์ด๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ˆ˜ํ–‰ํ•  ํ•จ์ˆ˜ p๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. p์˜ ๊ธธ์ด๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

๋‹ค์Œ ์ค„์—๋Š” ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง„๋‹ค. (0 ≤ n ≤ 100,000)

๋‹ค์Œ ์ค„์—๋Š” [x1,...,xn]๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ xi ≤ 100)

์ „์ฒด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ฃผ์–ด์ง€๋Š” p์˜ ๊ธธ์ด์˜ ํ•ฉ๊ณผ n์˜ ํ•ฉ์€ 70๋งŒ์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ์ •์ˆ˜ ๋ฐฐ์—ด์— ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” error๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


 

์ผ๋‹จ ์ฒ˜์Œ์—” vector๋กœ ์‹œ๊ฐ„๋ณต์žก๋„ ๊ณ ๋ ค์•ˆํ•˜๊ณ  reverse ์ผ๋‹ค๊ฐ€ ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ˜ผ๋‚จ.

 

๊ทธ๋ฆฌ๊ณ  reverse ํ•จ์ˆ˜๊ฐ€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n)์ด๋ผ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค๋Š” ๊ฑธ ํ™•์ธํ•˜๊ณ ,

'R'์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ทธ๋ƒฅ bool ๋ณ€์ˆ˜๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•ด์„œ 'D'์ผ๋•Œ ์•ž์—์„œ v.erase ํ•˜๊ฑฐ๋‚˜ v.pop_back์„ ํ•ด์ฃผ์—ˆ๋Š”๋ฐ ์ด๊ฒƒ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ.

 

๊ฒฐ๊ตญ.... ๊ตฌ๊ธ€๋ง์œผ๋กœ

๋ฒกํ„ฐ์˜ ์•ž ์›์†Œ๋ฅผ ์ง€์šธ๋•Œ๋Š” ์„ ํ˜•์‹œ๊ฐ„์ด ๋“ค๊ธฐ ๋•Œ๋ฌธ์—

์–‘์ชฝ์—์„œ pop์„ ํ•  ์ˆ˜ ์žˆ๋Š” deque๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์จ์•ผ๋งŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒŒ ์™œ ๊ณจ๋“œ5 ๋ฌธ์ œ๋ƒ ํ–ˆ๋Š”๋ฐ.. ๊ณจ๋“œ ๋งž๋„ค.

 

๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ• ์ˆ˜์—…์‹œ๊ฐ„์— ๋ฐฐ์šด ๊ฐœ๋…์ธ๋ฐ, ์“ธ ์ผ์ด ์žˆ์œผ๋ ค๋‚˜ ํ•˜๊ณ  ๊ฐ€๋ณ๊ฒŒ ๋„˜๊ฒผ๋˜ ๋‚ด์šฉ์„

์—ฌ๊ธฐ์„œ ์จ๋จน์„์ค„์ด์•ผ ใ… ใ…กใ…  ์ž˜ ์•Œ์•„๋†”์•ผ๊ฒ ๋‹ค

 

 

 

๋‚˜์˜ ํ’€์ด

#include <iostream>
#include <string>
#include <deque>
#include <algorithm>
using namespace std;

string p = "";
int n;
string xstring = "";
deque<int> x;

void findxnum(string xstring){
    x.clear();
    string tmp = "";
    for (int i = 0; i < xstring.length(); ++i){
        if (xstring[i] == '[') continue;
        if(xstring[i]==',' || xstring[i] == ']'){
            if(tmp.length()>0){
                int a = stoi(tmp);
                x.push_back(a);
                tmp = "";
            }
            continue;
        }
        tmp += xstring[i];
    }
    return;
}

void AC(){
    bool rev = false;
    for (int i = 0; i < p.length(); ++i){
        if(n==0){
            if(p[i]=='D'){
                cout << "error\n";
                return;
            }
            if(p[i]=='R'){ // ๋น„์—ˆ์„๋•Œ๋Š” R๋„ ์ฒ˜๋ฆฌํ•„์š”
                continue;
            }
        }

        if(p[i]=='D'){
            n--;
            // cout << n << " / ";
            if (rev) x.pop_back();
            else x.pop_front();
        }
        if(p[i]=='R'){
            // reverse(x.begin(), x.end()); // ์‹œ๊ฐ„์ดˆ๊ณผ
            if(rev) rev = false;
            else rev = true;
        }
    }

    cout << "[";
    if(!rev){
        for (int i = 0; i < x.size(); ++i){
            if(i == x.size()-1){
                cout << x[i];
                break;
            }
            cout << x[i] << ",";
        }
    }
    else{
        for (int i = x.size()-1; i >= 0; --i){
            if(i == 0){
                cout << x[i];
                break;
            }
            cout << x[i] << ",";
        }
    }
    cout << "]\n";
    return;
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int t;

    cin >> t;
    for (int i = 0; i < t; ++i){
        cin >> p;
        cin >> n >> xstring;
        findxnum(xstring);
        AC();
    }
    return 0;
}