반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

백준 5430 AC 본문

백준(Baekjoon) 문제

백준 5430 AC

huiung 2019. 2. 19. 13:21
반응형

문제와 채점은 위 사이트에서 확인 하실 수 있습니다

 

이 문제는 배열과 R, D 명령을 입력받고 각 명령에 맞게 배열을 변경한후 출력하는 문제입니다.

 

우선 기본적으로 deque를 사용하여서 풀었고, 배열의 입력은 stringstream을 이용해서 받았습니다.

 

주의할 점은 R이 나왔을 때 배열을 뒤집으면 시간초과가 나게 됩니다. 배열을 뒤집는게 아니라 덱의 뒷부분에서 원소를 빼는 상황으로 바뀐다고 생각하면

flag를 하나 주어서 현재 상태를 체크해주며 앞,뒤에서 빼주고 배열을 완성한후 출력하면 해결이 됩니다.

 

다음은 코드입니다.

 

#include <iostream>
#include <deque>
#include <string>
#include <sstream>
using namespace std;

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int T;
	cin >> T;
	deque<int> dq;
	bool flag;
	bool rflag; 
	while(T--) {
		stringstream ss;
		dq.clear();
		flag = true;
		rflag = false;
		string str;
		cin >> str;
		int x; cin >> x;
		string str2;
		cin >> str2;
		ss.str(str2);
		char a;
		while(ss>>a) { //문자를 읽을 수 있을 떄 까지 
			int x;
			if(ss>>x) //숫자 하나를 읽을수 있다면 읽어들임 
				dq.push_back(x);
		}
		int len = str.size();
		for(int i = 0; i < len; i++) {
			if(str[i] == 'R') { 
				rflag = !rflag;
			}
			else if(str[i] == 'D') {
				if(dq.empty()) {
					flag = false;
					break;	
				}
				if(rflag) // rflag 조건에 따라 앞이나 뒤의 원소 제거 
					dq.pop_back();
				else
					dq.pop_front();
			}
		}
			if(rflag) {
				deque<int> dqc;
				while(dq.size() > 1) {
					dqc.push_back(dq.front());
					dq.pop_front();
				}
				
				while(!dqc.empty()) {
					dq.push_back(dqc.back());
					dqc.pop_back();
				}
			}
		
		if(flag) {
			cout<<'[';
			for(int i = 0; i < dq.size(); i++) {
				if(i == dq.size()-1)
					cout<<dq[i];
				else
					cout<<dq[i]<<',';
			}
			cout<<']'<<'\n'; 
		}
		else
			cout<<"error"<<'\n';
	}
	return 0;
}

 

반응형