작심 24/7

[백준] 5430번 AC 본문

백준

[백준] 5430번 AC

모닝수박 2020. 6. 4. 16:00
 

5430번: AC

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

www.acmicpc.net

처음에 algorithm 라이브러리에 있는 reverse 함수를 썼었는데 시간 초과 걸려서

start 인덱스와 end 인덱스를 가지고 R과 D를 수행했다.

 

R인 경우에는 start와 end를 교환해주고

D인 경우에는 배열이 비어있을 경우 error처리해주고

그 외엔 start가 그다음 숫자를 가리키게 하였다.

 

여기서 주의할 점은 입력으로

D

0

[]

가 들어오면

배열이 비어있는데 D를 사용하기 때문에 error를 출력해야 하지만

 

R

0

[]

이런 식으로 들어오면 R은 error가 날 이유가 없기 때문에 []를 출력해야 한다.

 

이 부분들을 따로 처리해주면 끝

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

int main() {
	int T;
	cin >> T;

	string p, arr;
	int N;
	for (int t = 0; t < T; t++) {
		int res[100001] = { 0 }, error = 0;
		cin >> p >> N >> arr;
		if (N == 0) {
			for (int i = 0; i < p.size(); i++) {
				if (p[i] == 'D') {
					cout << "error\n";
					break;
				}
				else if (i == p.size() - 1) cout << "[]\n";
			}
			continue;
		}
		
		int idx = 0;
		string num;
		for (int i = 1; i < arr.size(); i++) {
			if (arr[i] >= '0' && arr[i] <= '9') num += arr[i];
			else if (arr[i] == ',' || arr[i] == ']') {
				res[idx] = stoi(num);
				idx++;
				num = "";
			}
		}

		error = 0;
		int start = 0, end = N, temp;
		for (int i = 0; i < p.size(); i++) {
			if (p[i] == 'R') {
				temp = start;
				start = end;
				end = temp;
			}
			else {
				if (start == end) {
					error = 1;
					break;
				}
				if (start > end) start--;
				else start++;
			}
		}
		
		if (error == 1) cout << "error\n";
		else {
			cout << "[";
			if (start < end) {
				for (int i = start; i < end; i++) {
					if (i == end - 1) cout << res[i];
					else cout << res[i] << ",";
				}
			}
			else {
				for (int i = start - 1; i >= end; i--) {
					if (i == end) cout << res[i];
					else cout << res[i] << ",";
				}
			}
			cout << "]\n";
		}
	}
	return 0;
}

'백준' 카테고리의 다른 글

[백준] 1725번 히스토그램  (0) 2020.06.05
[백준] 1918번 후위 표기식  (0) 2020.06.04
[백준] 3078번 좋은 친구  (0) 2020.06.03
[백준] 1966번 프린터 큐  (0) 2020.06.03
[백준] 2156번 포도주 시식  (0) 2020.05.30
Comments