백준 5430 - AC

Updated:

Java

5430 번 - AC

문제

접근 방법

Deque의 원리를 사용하여 해결하였다.
R 함수를 받았을 때, 문자열을 뒤집는 것이 아닌 반대 방향에서 poll하는 방식으로 뒤집은 것 처럼 나타내었다.

코드

import java.util.*;
import java.io.*;

public class Main {
	static int n, result;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer stk;
    	int tc = stoi(br.readLine());
    	String odr, input;
    	next: while(tc-- != 0) {
    		odr = br.readLine();
    		n = stoi(br.readLine());
    		input = br.readLine();

			// [ ]와 ,를 없앤 뒤 수를 deque 에 넣는다.
			input = input.substring(1,input.length() - 1);
    		stk = new StringTokenizer(input,",");
    		Deque<String> deque = new ArrayDeque<String>();
    		for(int i = 0; i < n; i++) {
    			deque.add(stk.nextToken());
    		}
			// pollFirst, pollLast를 할 지 선택하는 flag
    		boolean front = true;

    		char order;
    		for(int i = 0; i < odr.length(); i++) {
    			order = odr.charAt(i);

    			if(order == 'R') {
    				front = !front;		// 이제 부터 반대 편에서 연산한다.
    			}
    			else {
    				if(deque.isEmpty()) {
    					System.out.println("error");
    					continue next;
    				}

    				if(front) {
    					deque.pollFirst();
    				}
    				else {
    					deque.pollLast();
    				}
    			}
    		}

    		StringBuilder sb = new StringBuilder();
			// 마지막으로 앞에서 부터 확인한다면
    		if(front) {
    			sb.append('[');
    			while(!deque.isEmpty()) {
    				sb.append(deque.pollFirst());
    				if(!deque.isEmpty()) {
    					sb.append(',');
    				}
    			}
    			sb.append(']');
    		}
    		else {
    			sb.append('[');
    			while(!deque.isEmpty()) {
    				sb.append(deque.pollLast());
    				if(!deque.isEmpty()) {
    					sb.append(',');
    				}
    			}
    			sb.append(']');
    		}
    		System.out.println(sb.toString());
    	}
    	br.close();
	}

	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

정답률 20퍼대라 조금 겁 먹었지만, 오히려 쉽게 해결 할 수 있었던 문제,
자바의 deque의 위력을 깨달았다.

개선할 점