💡Problem Solving/BOJ
[BOJ 5430] AC (Java)
gom20
2021. 11. 15. 11:17
문제
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
풀이
Deque 문제로 R명령어가 들어왔을 때 값이 들어가는 입구를 바꿔주면 된다. (First, Last)
First를 입구로 사용한다면 나중에 값을 뽑을 땐 Last로 뽑아야 생각한 순서대로 값이 출력된다. (반대도 마찬가지)
이 부분이 처음에 헷갈려서 LinkedList 메소드를 테스트하면서 정리해보았다.
2021.11.15 - [Java] - [Java] Deque 자료 구조 (LinkedList 메소드)
[Java] Deque 자료 구조 (LinkedList 메소드)
Deque 구현체로 ArrayDeque와 LinkedList 를 주로 사용한다. LinkedList에 값을 넣고 뽑기 위한 많은 메소드를 있는데, 헷갈리는 점이 있어서 정리한다. Deque란? 덱(deque, "deck"과 발음이 같음 ← double-ende..
gom20.tistory.com
소스코드
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();
}
}