[ ALGORITHM ]/[ 백 준 ]

[BAEKJOON] 5430번 : AC

HiStar__ 2020. 7. 31. 17:40

문 제

 

소 스  코 드

#include <iostream>
#include <deque>
#include <string>

void AC();
void Input_number(std::deque<int>&);


int main() {
	std::ios_base::sync_with_stdio(false);
	std::cout.tie(NULL);
	std::cin.tie(NULL);

	int T;
	std::cin >> T;

	for (int i = 0; i < T; ++i) {
		AC();
	}

}

void AC() {
	std::deque<int> dq;
	std::string s;
	int index;

	std::cin >> s;
	std::cin >> index;

	Input_number(dq);

	bool tf{ false };

	for (int i = 0; i < s.length(); ++i) {
		if ('R' == s[i]) tf = !tf;
		else if ('D' == s[i]) {
			if (dq.empty()) {
				std::cout << "error" << '\n';
				return;
			}
			if (tf) dq.pop_back();
			else dq.pop_front();

		}
		else return;
	}

	if (dq.empty()) std::cout << "[]" << '\n';
	else if (tf) {
		std::cout << "[" << dq.back();
		dq.pop_back();
		while (!dq.empty()) {
			std::cout << "," << dq.back();
			dq.pop_back();
		}
		std::cout << "] \n";
	}
	else {
		std::cout << "[" << dq.front();
		dq.pop_front();
		while (!dq.empty()) {
			std::cout << "," << dq.front();
			dq.pop_front();
		}
		std::cout << "] \n";
	}

}

void Input_number(std::deque<int>& dq) {
	std::string input;

	std::cin >> input;

	std::string temp;

	int index{ 0 };
	for (int i = 0; i < input.length(); ++i) {
		if ('[' == input[i]) continue;
		else if (']' == input[i]) {
			if (0 == index) return;
			dq.push_back(std::stoi(temp));
			temp.clear();
		}
		else if (',' == input[i]) {
			dq.push_back(std::stoi(temp));
			temp.clear();
		}
		else {
			temp.push_back(input[i]);
			++index;
		}
	}
}

 

풀 이

 

  • AC 문제의 주의점

  • Input을 할 때, 1 ~ 100까지 3자리까지 가능하기 때문에, stoi를 사용하여 값을 입력 받았습니다.

  • deque를 통하여 front와 back에서 뽑는다면 서로 전환 시킬 수 있기 때문에, 실제로 reverse하는 것이 아닌, deque를 통하여 빠르게 구현 할 수 있다.

 

출 력 값

 

 

문 제  출 처

문제 링크 : [ BAEKJOON ] :  https://www.acmicpc.net/problem/5430

 

5430번: AC

문제 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있

www.acmicpc.net