알고리즘/PS

[C++] 백준 5430 : AC

BigmacGood 2022. 3. 30. 11:56

https://www.acmicpc.net/problem/5430

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

백준 5430번 AC를 풀어봤습니다.

자료구조 deque를 사용해서 배열을 뒤집는 연산을 하지 않고 pop_back()과 pop_front()로 R연산을 해줬습니다.

 

아래는 전체 코드입니다.

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

deque<int> dq;
string ans[100];

bool funtion(string work, deque<int>& dq, bool *isReverse) {
	for (int i = 0; i < work.size(); i++) {
		if (work[i] == 'R') {
			if (*isReverse == 1)
				*isReverse = 0;
			else
				*isReverse = 1;
		}
		if (work[i] == 'D') {
			if (dq.size() == 0) {
				cout << "error\n";
				return true;
			}
			if (*isReverse == 1) {
				dq.pop_back();
			}
			else {
				dq.pop_front();
			}
		}
	}
	return false;
}

int main() {
	int t;
	cin >> t;
	for (int i = 0; i < t; i++) {
		string work;
		int n;
		string arr_int;
		int temp = 0;
		cin >> work >> n >> arr_int;

		for (int j = 0; j < arr_int.size(); j++) {
			if (n == 0)
				break;
			if (isdigit(arr_int[j])) {
				temp++;
				dq.push_back(arr_int[j] - 48);
				if (temp == 2) {
					int x = dq.back();
					dq.pop_back();
					int y = dq.back();
					dq.pop_back();
					dq.push_back(10 * y + x);
				}
				else if (temp == 3) {
					int x = dq.back();
					dq.pop_back();
					int y = dq.back();
					dq.pop_back();
					dq.push_back(10 * y + x);
				}
			}
			else {
				temp = 0;
			}
		}

		bool isReverse = 0;
		int isError = funtion(work, dq, &isReverse);
		
		if (isError == 1) {
			// Do nothing
		}
		else {
			cout << '[';
			if (isReverse == 0) {
				for (int i = 0; i < dq.size(); i++) {
					if (dq.size() == 1)
						cout << dq[i];
					else if (dq.size() != 1) {
						if (i == dq.size() - 1) {
							cout << dq[i];
						}
						else {
							cout << dq[i] << ',';
						}
					}
				}
			}
			else {
				for (int i = 0; i < dq.size(); i++) {
					if (dq.size() == 1)
						cout << dq[dq.size() - i -1];
					else if (dq.size() != 1) {
						if (i == dq.size()-1) {
							cout << dq[dq.size() - i - 1];
						}
						else {
							cout << dq[dq.size() - i - 1] << ',';
						}
					}
				}
			}
			cout << ']' << '\n';
		}

		dq.clear();
	}
}

 

'알고리즘 > PS' 카테고리의 다른 글

[C++] 백준 1932 : 정수 삼각형  (0) 2022.04.01
[C++] 백준 1149 : RGB거리  (0) 2022.03.31
[C++] 백준 1504 : 특정한 최단경로  (0) 2022.03.29
[C++] 백준 2580 : 스도쿠  (0) 2022.03.29
[C++] 백준 9663 : N-Queen  (0) 2022.03.29