Beakjoon 5430 AC
in Algorithm
문제 링크 : https://www.acmicpc.net/problem/5430
나의 풀이
배열의 처음 원소의 인덱스 start와 마지막 원소의 인덱스 end를 정해 문제를 해결하였다.
처음 배열의 방향을 정방향이라고 생각했을 때 정방향일 때 D 명령어를 수행하면 start를 우측으로 이동, 역방향일 때 D 명령어를 수행하면 end를 좌측으로 이동하게 하였다. R 명령어는 정방향이면 역방향으로, 역방향이면 정방향으로 바꿔준다.
[1, 2, 3, 4, 5] 라는 배열이 주어지고, 명령어가 DRD일 때를 표현하면 아래 그림과 같다.
만약 모든 원소가 삭제되면 start > end가 되고, 이 상황에서 D 명령어가 들어오면 error를 출력한다.
풀이 코드 : 5430 AC
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int T;
cin>>T;
for(int t=0;t<T;t++){
string cmd;
cin>>cmd;
int N;
cin>>N;
string arr_str;
vector<int> arr;
cin>>arr_str;
int num = 0;
if(N != 0){
for(int i=1;i<arr_str.size();i++){
if(arr_str[i] >= '0' && arr_str[i] <= '9'){
num *= 10;
num += arr_str[i] - '0';
}
else if(arr_str[i] == ',' || arr_str[i] == ']'){
arr.push_back(num);
num = 0;
}
}
}
int reverse = -1;
int start = 0;
int end = N-1;
bool err = false;
for(int i=0;i<cmd.size();i++){
if(cmd[i] == 'R')
reverse *= -1;
else if(cmd[i] == 'D'){
if(start > end) err = true;
if(reverse == -1){
start++;
}
else{
end--;
}
}
}
if(err){
cout<<"error\n";
}
else{
cout<<"[";
if(reverse == -1){
for(int i=start;i<=end;i++){
if(i != end)
cout<<arr[i]<<",";
else
cout<<arr[i];
}
}
else{
for(int i=end;i>=start;i--){
if(i != start)
cout<<arr[i]<<",";
else
cout<<arr[i];
}
}
cout<<"]\n";
}
}
}