본문 바로가기
온라인 저지/BOJ

[BOJ/Java] 5430 AC

by ahj 2022. 2. 13.

Queue로 열심히 풀다가 시간 다 버린 문제.. 문자열 처리도 까다로워서 해결하는데 시간을 많이 소요했다. 또 숨겨진 테스트케이스를 찾지 못해서 오랫동안 애먹었다. 이하 나름 refactor하고 주석으로 정리해본 코드

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

public class BOJ5430 {

	static BufferedReader br;
	static StringBuilder sb;
	static int T, tc, n, i, j;
	static String funcP, tmpStr, tmpStrList[];
	static ArrayDeque<Integer> dq;
	static boolean err, rvrs;

	public static void main(String[] args) throws Exception {
		br = new BufferedReader(new InputStreamReader(System.in));
		sb = new StringBuilder();
		T = Integer.parseInt(br.readLine());
		dq = new ArrayDeque<Integer>();
		for (tc = 0; tc < T; tc++) {
			// 각 case별 초기화
			dq.clear();
			err = rvrs = false;
			// 함수 P String 받기
			funcP = br.readLine();
			// 배열 내 개수
			n = Integer.parseInt(br.readLine());
			// 문자열 처리
			// 한줄 받고
			tmpStr = br.readLine();
			// substring을 통해 양 끝에 []제거
			tmpStr = tmpStr.substring(0, tmpStr.length() - 1).substring(1);
			// ,을 기준으로 StringArray 생성
			tmpStrList = tmpStr.split(",");
			// 각 숫자들을 dq에 넣어주기
			for (j = 0; j < n; j++) {
				dq.offer(Integer.parseInt(tmpStrList[j]));
			}
			// funcP 실행
			for (j = 0; j < funcP.length(); j++) {
				switch (funcP.charAt(j)) {
				case 'R':
					// reverse 여부 check
					if (rvrs)
						rvrs = false;
					else
						rvrs = true;
					break;
				case 'D':
					// error check 하기
					if (!err) {
						if (rvrs) {
							if (dq.pollLast() == null) {
								err = true;
								sb.append("error");
							}
						} else {
							if (dq.poll() == null) {
								err = true;
								sb.append("error");
							}
						}
					}
					break;
				}
			}
			// err가 아닐 경우 []를 포함한 String 반환해야 함
			if (!err) {
				sb.append("[");
				if (!dq.isEmpty()) {
					if (rvrs) {
						while (!dq.isEmpty()) {
							sb.append(dq.pollLast()).append(",");
						}
					} else {
						while (!dq.isEmpty()) {
							sb.append(dq.poll()).append(",");
						}
					}
					sb.setLength(sb.length() - 1);
				}
				sb.append("]");
			}
			sb.append("\n");
		}
		br.close();
		System.out.println(sb);
	}
}

 

'온라인 저지 > BOJ' 카테고리의 다른 글

[BOJ/Java] 2961 도영이가 만든 맛있는 음식  (0) 2022.02.14
[BOJ/Java] 12927 배수 스위치  (0) 2022.02.13
[BOJ/Java] 1874 스택 수열  (0) 2022.02.13
[BOJ/Java] 18258 큐2, 10866 덱  (0) 2022.02.13
[BOJ/Java] 11047 동전 0  (0) 2022.02.13

댓글