출처 : https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
고려사항
- string으로 수 배열을 받아서 파싱하는 작업이 복잡! ( 79 - 89 라인)
- 빈배열([ ]) 이라면 파싱을 안거치기 위해 예외처리! ( 74 - 77 라인)
- 처음에는 덱을 활용하여, R이 나타나면 불리언 flag를 설정하여 pop_front, pop_back 할 지를 결정할라 했지만
www.acmicpc.net/board/view/25456 를 참조하여 직접 큐를 구현했을 때처럼 front, back 인덱스를 관리해주기로 결정.
글 읽기 - ★☆★☆★ [필독] AC FAQ ★☆★☆★
댓글을 작성하려면 로그인해야 합니다.
www.acmicpc.net
- front 는 pop() 할 자리, back 은 push() 할 자리.
- 'R' 일시에 17 - 27 라인 처럼 인덱스 관리. 윗줄의 규칙을 지킨다고 생각!
단, back 인덱스가 -1 이 될 수도 있지만, 5430 문제에서는 더이상의 push는 없기 때문에 신경쓰지 않아도 된다.
- front == back 이면 비어있는 상태 => 'D' 일시에 error 출력.
- front < back 이면 정상 순서 => front ~ back 증가하면서 출력
- front > back 이면 R로 인해 뒤집은 상태 => front ~ back 감소하면서 출력
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
#include <stdlib.h>
using namespace std;
void print(string str, vector<int> &v){
int funcLen = str.length();
int front = 0;
int back = v.size();
int tmp;
char c;
for(int j=0;j<funcLen;++j){
c = str[j];
if(c == 'R'){
if(front < back){
tmp = back;
back = front-1;
front = tmp-1;
}else if( front > back){
tmp = back;
back = front+1;
front = tmp+1;
}
}else{
if(front == back){
cout<<"error\n";
return ;
}else{
if(front < back){
++front;
}else if(front > back){
--front;
}
}
}
}
cout<<"[";
if(front < back){
for(int i=front;i<back;++i){
if(i == front){
cout<<v[i];
}else{
cout<<","<<v[i];
}
}
}else if(front > back){
for(int i=front;i>back;--i){
if(i == front){
cout<<v[i];
}else{
cout<<","<<v[i];
}
}
}
cout<<"]\n";
}
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
int t, n, cur, prev;
string func, arr;
cin>>t;
for(int i=0;i<t;++i){
cin>>func>>n>>arr;
vector<int> v;
if(n == 0){
print(func, v);
continue;
}
arr.erase(arr.begin());
arr.erase(arr.end()-1);
prev = 0; cur = arr.find(',');
while(cur != -1){
string str = arr.substr(prev,cur-prev);
v.push_back(stoi(str));
prev = cur+1;
cur = arr.find(',', prev);
}
v.push_back(stoi(arr.substr(prev,cur-prev)));
print(func, v);
}
return 0;
}
'BOJ 백준 > 기타' 카테고리의 다른 글
백준 12015 - 가장 긴 증가하는 부분 수열 2 (0) | 2020.11.10 |
---|---|
백준 01717 - 집합의 표현 (0) | 2020.11.09 |
백준 01021 - 회전하는 큐 (0) | 2020.11.05 |
백준 01966 - 프린터 큐 (0) | 2020.11.03 |
백준 11866 - 요세푸스 문제 0 (0) | 2020.11.01 |