혜랑's STORY

[BOJ_C++] 5430번 : AC 본문

무지성 공부방/알고리즘 해결

[BOJ_C++] 5430번 : AC

hyerang0125 2022. 9. 28. 22:03

CODE

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int t, n;
    string p, list, temp;
    bool error, reverse;

    cin >> t;
    while(t--){
        reverse = error = false;
        deque<string> dq;
        cin >> p;
        cin >> n;
        cin >> list;
        for(int i=1; i<list.length(); i++){
            if(list[i] == ',' || list[i] == ']'){
                if(temp == "") continue;
                dq.push_back(temp);
                temp = "";
            }
            else temp += list[i];
        }

        for(int i=0; i<p.length(); i++){
            switch (p[i])
            {
            case 'R':
                if(reverse) reverse = false;
                else reverse = true;
                break;
            
            case 'D':
                if(dq.empty()){
                    cout << "error\n";
                    error = true;
                }
                else if(reverse) dq.pop_back();
                else dq.pop_front();
                break;

            default:
                break;
            }
            if(error) break;
        }
        if (!error){
            cout << "[";
            if(!reverse && !dq.empty()){
                while(dq.size()>1){
                    cout << dq.front() << ",";
                    dq.pop_front();
                }
                cout << dq.front();         
            }
            else if(reverse && !dq.empty()){
                while (dq.size() > 1){
                    cout << dq.back() << ",";
                    dq.pop_back();
                }
                cout << dq.back();
            }
            cout << "]\n";
        }
    }

    return 0;
}

문제 풀이

  1. 입력받은 배열을 '[', ',', ']'를 제외한 숫자 부분을 dq 덱에 담아 준다.
  2. R 함수는 reverse하는 함수이다. (처음에 진짜 reverse 했다가 시간초과 나옴,,,)
  3. D 함수는 맨 앞 원소를 지우는 함수이다.
    1. 만약 reverse가 true라면 뒤집어져 있는 것이므로 맨 뒤에 있는 원소를 제거한다.
    2. reverse가 false라면 배열이 뒤집어지지 않은 것이므로 맨 앞의 원소를 제거한다.
    3. 만약 error가 나온다면 error를 출력하고 for문을 탈출한다. (탈출 안하면 D개수만큼 error가 찍혀서 틀림,,,)
  4. 출력할 때 reverse인 경우와 아닌 경우를 구분해서 출력해야 한다. 이때 주의할 점은 dq가 비어있지 않은 경우 원소를 출력해야 한다. (33%에서 계속 틀렸습니다가 나왔는데 비어있는 배열을 출력할 때 닫는 대괄호(']')가 출력이 안되었기 때문이었음,,,)

결과