[BOJ] 5430. AC

쩡쎈·2021년 9월 7일
0

BOJ

목록 보기
8/18

문제

BOJ 5430. AC

풀이

처음에는 배열을 사용해서 풀려고 했는데 시간을 생각해보니 무조건 터질거 같았다,, 스트링으로 들어오는 배열 입력을 substring과 split을 사용해서 파싱 후 스트링 배열에 담고 deque에는 integer 형태로 변환해서 삽입했다.
함수 R이 입력으로 들어오면 배열을 뒤집어야 했는데 배열 자체를 reverse하면 이것도 무조건 터짐ㅎ.. 그래서 isRight라는 방향 체크 변수를 선언해서 reverse할 때마다 true,flase 토글해주었다! 삽입과 삭제가 리스트의 양쪽 끝에서 모두 발생할 수 있는 Deque를 사용했다.
함수 D가 입력되면 deque의 사이즈를 체크해서 사이즈가 0이면 error를 출력하고 아니면 원소를 삭제하였다.
Deque에 관해서 서치해보면서 풀어본거라 시간이 지난 후에 다시 풀어봐야 할 것 같다.

JAVA코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;

public class 백준5430_AC {
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int TC = Integer.parseInt(br.readLine());

		StringBuilder sb = new StringBuilder();

		for (int tc = 1; tc <= TC; tc++) {

			String p = br.readLine();
			int n = Integer.parseInt(br.readLine());

			String strArr = br.readLine();
			strArr = strArr.substring(1, strArr.length() - 1);
			String[] arr = strArr.split(",");

			Deque<Integer> deque = new ArrayDeque<Integer>();
			for (String s : arr) {
				if (!s.equals(""))
					deque.addLast(Integer.parseInt(s));
			}

			func(p, sb, deque);

		}

		System.out.print(sb.toString());

	}

	public static void func(String p, StringBuilder sb, Deque<Integer> deque) {

		boolean isRight = false; // 방향 상태 변수

		for (int i = 0; i < p.length(); i++) {
			char ch = p.charAt(i);

			if (ch == 'R') {
				isRight = !isRight;
				continue;
			} else {
				if (deque.size() == 0) {
					sb.append("error\n");
					return;
				}

				if (isRight) { // 오른쪽 방향 경우
					deque.removeLast();
				} else if (!isRight) { // 왼쪽 방향인 경우
					deque.removeFirst();
				}
			}
		}
		printDeque(sb, deque, isRight);
	}

	public static void printDeque(StringBuilder sb, Deque<Integer> deque, boolean isRight) {

		sb.append("[");
		while (!deque.isEmpty()) {
			sb.append(isRight ? deque.removeLast() : deque.removeFirst());
			if (deque.size() != 0)
				sb.append(",");
		}

		sb.append("]\n");
	}
}
profile
모르지만 알아가고 있어요!

0개의 댓글