Algorithm/etc.

하..심한욕.. (백준 5430 AC C++)

pinevienna 2021. 1. 24. 17:08

 

 

큐 마지막 문제 빨리 풀고 영어공부하려고 했다

문제 읽어보면 되게 쉬운데 왜 정답 비율이 20%지?? 하며 시작

 

R과 D라는 함수가 있는데, R은 큐를 뒤집는거고 D는 pop_front()

후~ 뒤집는거 쩜 번거롭네^^ 하며 시키는 대로 열심히 뒤집고 삭제함

 

 

 

ㅎㅎ

짱나서 강아지 털 깎고 와서 다시 시작

 

뒤집으면 시간이 오래 걸려서 안되고, 뒤집은척 해야 한다는 사실을 알게 됐다

bool 변수 이용해서 뒤집은 상태인지 뒤집지 않은 상태인지 체크했다

뒤집은 상태면 pop_back() + 출력할 때도 뒤에서부터 출력해주면 됨

 

 

 

ㅎㅎ

AccessEmptyContainer..? 저는 빈 곳에 access 한 적이 없는데요..?

라 생각했지만 출력할 때 큐가 비어있어도 큐를 출력하도록 했었다

비어있는 상태에서 삭제하려는 경우만 생각하고 큐가 그냥 비어있을 수 있다는 생각을 못함

수정하고 다시 제출

 

 

(심한욕)

하.. 뭐가 문제일까.. 아닌데 문제없는데..

홈페이지가 돌아버린거 아닐까? 하며 인터넷에 다른 사람 코드를 복붙해봤다

 

맞았습니다!!

 

응응..

열심히 뒤져봄

 

if (n == 0) {
  cout << "error" << "\n";
  continue;
}

 

문제는 이 코드였다

뒤집고 삭제할 건데 배열 요소가 0인게 말이 되나? 하면서 맨첨에 이런 코드를 넣었는데

배열요소가 없는 상태에서 뒤집는 건 별 상관이 없는가보다

찾고 보니 진짜 어이없는 실수

문제에선 비어있는 경우에 삭제하면 오류 생긴다 했지 뒤집을 때 오류 생긴다고는 안했다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <iostream>
#include <deque>
#include <string>
using namespace std;
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
 
    int t, n;
    string p, x, arr;
    deque<int> q;
    bool err, r;
 
    cin >> t;
    while (t--) {
        cin >> p >> n >> arr;
 
        for (int i = 0; i < arr.size(); i++) {
            if (arr[i] == '['continue;
            if (arr[i] == ']') {
                if (x.size() == 0break;
 
                q.push_back(stoi(x));
                x.erase();
                break;
            }
            if (arr[i] == ',') {
                q.push_back(stoi(x));
                x.erase();
                continue;
            }
            x += arr[i];
        }
 
        err = false;
        r = false;
        for (int i = 0; i < p.size(); i++) {
            if (p[i] == 'R') r = !r;
            else {
                if (q.empty()) {
                    err = true;
                    break;
                }
 
                if (r == false) q.pop_front();
                else q.pop_back();
            }
        }
 
        if (err)
            cout << "error" << "\n";
        else {
            cout << "[";
 
            while (!q.empty()) {
                if (r == false) {
                    cout << q.front();
                    q.pop_front();
                }
                else {
                    cout << q.back();
                    q.pop_back();
                }
 
                if (q.empty()) break;
                cout << ",";
            }
            cout << "]\n";
        }
    }
}
cs

 

 

이제 영어하러 가야지...