Algorithm/BOJ
[백준 알고리즘/C++/큐, 덱] 5430 AC
pinevienna
2021. 7. 9. 00:47
AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다.
함수 R은 배열에 있는 숫자의 순서를 뒤집는 함수이고, D는 첫 번째 숫자를 버리는 함수이다.
배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다.
배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 문제
함수와, 배열에 들어있는 수의 개수, 배열이 주어졌을 때 결과를 구하면 된다!
RDD
4
[1,2,3,4]
이렇게 입력되면 [2,1]을 출력한다
문제 자체는 쉽다!! 근데 시간초과를 조심해야 한다
R이 순서를 뒤집는 함수라고 했는데, 진짜 뒤집으려 하면 끝도 없음
내가 또 그 끝도 없는걸 한 번 했었지..^^!
덱의 장점을 살려서, R을 홀수번 수행하면 역방향으로 출력하게 하면 됨
코드에선 홀짝인지 세어보진 않았고, boolean r을 만들어서 true면 역방향으로 출력하게 했다
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
73
74
75
|
#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() == 0) break;
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 사용
r = false; //false = 순방향, true = 역방향
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 |
이건 나의 우여곡절을 포스팅했던 것.. 그러고보니 문제 푼지 6개월만에 코드 올리네ㅋㅋㅋ
하..심한욕.. (백준 5430 AC C++)
큐 마지막 문제 빨리 풀고 영어공부하려고 했다 문제 읽어보면 되게 쉬운데 왜 정답 비율이 20%지?? 하며 시작 R과 D라는 함수가 있는데, R은 큐를 뒤집는거고 D는 pop_front() 후~ 뒤집는거 쩜 번거롭
pinevienna.tistory.com