알고리즘

[Java] 백준 5430번 AC

J3SUNG 2023. 4. 1. 02:19
728x90

문자열 처리 문제입니다.

덱을 사용해서 입력받은 수를 넣어줍니다.
Boolean타입 변수를 하나 만들어 주고 R이 실행될 경우 true면 false로 false면 true로 바꾸어줍니다.
true, false에 따라서 앞에서 빼거나 뒤에서 빼주어서 reverse 명령어를 처리합니다.
D의 경우도 true, false에 따라 해당 위치를 빼주면 됩니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.util.Deque;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int ans = 0;
		int ts = Integer.parseInt(br.readLine());

		for (int t = 0; t < ts; ++t) {
			String com = br.readLine();
			int n = Integer.parseInt(br.readLine());
			String s = br.readLine();
			Boolean chk = false;
			Boolean err = false;
			Deque<Integer> dq = new ArrayDeque<>();
			s = s.substring(1, s.length() - 1);
			String[] arr = s.split(",");

			if (arr[0].equals("")) {
				arr = new String[0];
			}
			for (int i = 0; i < arr.length; ++i) {
				dq.add(Integer.parseInt(arr[i]));
			}

			for (int i = 0; i < com.length(); ++i) {
				if (com.charAt(i) == 'R') {
					chk = !chk;
				} else if (com.charAt(i) == 'D') {
					if (dq.size() == 0) {
						bw.write("error\n");
						err = true;
						break;
					}
					if (chk) {
						dq.removeLast();
					} else {
						dq.removeFirst();
					}
				}
			}

			if (err) {
				continue;
			}

			bw.write("[");
			if (!dq.isEmpty()) {
				if (chk) {
					bw.write(dq.getLast() + "");
					dq.removeLast();
				} else {
					bw.write(dq.getFirst() + "");
					dq.removeFirst();
				}
			}
			while (!dq.isEmpty()) {
				if (chk) {
					bw.write("," + dq.getLast());
					dq.removeLast();
				} else {
					bw.write("," + dq.getFirst());
					dq.removeFirst();
				}
			}
			bw.write("]\n");
		}
		bw.close();
	}
}