[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;
}