문제
https://www.acmicpc.net/problem/5430
풀이
Deque 문제로 R명령어가 들어왔을 때 값이 들어가는 입구를 바꿔주면 된다. (First, Last)
First를 입구로 사용한다면 나중에 값을 뽑을 땐 Last로 뽑아야 생각한 순서대로 값이 출력된다. (반대도 마찬가지)
이 부분이 처음에 헷갈려서 LinkedList 메소드를 테스트하면서 정리해보았다.
2021.11.15 - [Java] - [Java] Deque 자료 구조 (LinkedList 메소드)
소스코드
package queue;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
public class BOJ5430 {
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 T = Integer.parseInt(br.readLine());
for(int i = 0; i < T; i ++){
String command = br.readLine();
int N = Integer.parseInt(br.readLine());
String[] arr = br.readLine().replaceAll("^\\[", "")
.replaceAll("\\]$", "")
.split(",");
bw.write(solution(command, arr) + "\n");
}
bw.flush();
}
private static String solution(String command, String[] arr){
LinkedList<String> deque = new LinkedList<String>();
for(int i = 0; i < arr.length; i++){
if(arr[i].equals("")) continue;
deque.offerFirst(arr[i]);
}
boolean fifo = true; // offerFirst -> pollLast <-> offerLast -> pollFirst
for(int i = 0; i < command.length(); i++){
char c = command.charAt(i);
if(c == 'R'){
if(fifo) fifo = false;
else fifo = true;
} else {
if(deque.isEmpty()) return "error";
if(fifo){
deque.pollLast();
} else {
deque.pollFirst();
}
}
}
StringBuilder sb = new StringBuilder();
sb.append("[");
while(!deque.isEmpty()){
if(fifo) sb.append(deque.pollLast());
else sb.append(deque.pollFirst());
if(!deque.isEmpty()) sb.append(",");
}
sb.append("]");
return sb.toString();
}
}
'💡Problem Solving > BOJ' 카테고리의 다른 글
[BOJ 1992] 쿼드트리 (Java) (0) | 2021.11.17 |
---|---|
[BOJ 2630] 색종이 만들기 (Java) (0) | 2021.11.16 |
[BOJ 1021] 회전하는 큐 (Java) (0) | 2021.11.14 |
[BOJ 18258] 큐 2 (Java) (0) | 2021.11.14 |
[BOJ 4949] 균형잡힌 세상 (Java) (0) | 2021.11.14 |