
deque를 활용한 문제이다. 그리고 출력시에 주의가 좀 필요하다.
R이 들어왔을때 뒤집어야하는데, 진짜로 뒤집는게 아니라 deque에서 뒷부분(last)를 보면 된다. 뒤집은 것처럼 보이게한다.
나는 flag를 이용해서 뒤에를 봐야할 때를 표시했다. RR <- 이렇게 들어오면 두 번 뒤집어서 결국 뒤집지 않은 상태와 같다. flag는 처음에 0이고 flag=1 은 뒤에를 봐야한다는 표시이다.
switch (p.charAt(i)) {
case 'R':
flag = flag == 0 ? 1 : 0;
break;
case 'D':
if (deque.isEmpty()){
System.out.println("error");
return;
}
else{
if(flag == 1)
deque.pollLast();
else
deque.poll();
}
break;
}
출력시 주의사항은.. 비었을때 D를 하면 error발생이지만 비어있는 상태는 error가 아니라는 것이다. size가 0이고 빈 deque가 R를 한 뒤 출력결과는 [] 이어야 한다. 빈 상태도 error 처리를 했다가 두 번이나 오답처리를 받았다. deque를 만들때 n > 0 인 경우에만 deque를 만들고 아닐때(n==0)는 그냥 아무것도 안하게 처리했다.
또 주의사항?은, 내가 아직 자바 문법에 익숙하지 않아서 생긴 일이다. [1,23,4] 이런식으로 들어온 입력을 1 23 4 로 떼는게 익숙하지 않았다..ㅎㅎ String은 메소드도 많고 charAt은 한 글자고.,. 하니까 더 어렵게 느껴진다. 하다보면 적응이 되는 날이 오겠지
String[] xArr = x.replaceAll("[\\[\\]]", "").split(","); // 대괄호 빼고 숫자있는 String 배열 만들기
아래는 전체 코드이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;
public class BOJ5430 {
public static void AC(String p, int n, String x) {
int i, flag = 0, size;
Deque<Integer> deque = new LinkedList<>();
if (n > 0) { // 비었을때 예외 처리
String[] xArr = x.replaceAll("[\\[\\]]", "").split(","); // 대괄호 빼고 숫자있는 String 배열 만들기
for (i = 0; i < n; i++) {
deque.add(Integer.parseInt(xArr[i]));
}
}
for (i = 0; i < p.length(); i++) {
switch (p.charAt(i)) {
case 'R':
flag = flag == 0 ? 1 : 0;
break;
case 'D':
if (deque.isEmpty()){
System.out.println("error");
return;
}
else{
if(flag == 1)
deque.pollLast();
else
deque.poll();
}
break;
}
}
size = deque.size();
System.out.print("[");
for(i=1;i<size;i++){
if(flag == 1)
System.out.print(deque.pollLast()+",");
else
System.out.print(deque.pollFirst()+",");
}
if(size != 0)
System.out.print(deque.poll());
System.out.println("]");
}
public static void main (String[]args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i, T, n;
String p, x;
T = Integer.parseInt(br.readLine());
for (i = 0; i < T; i++) {
p = br.readLine();
n = Integer.parseInt(br.readLine());
x = br.readLine();
AC(p, n, x);
}
}
}
'코딩가딩가' 카테고리의 다른 글
| [JAVA]BOJ 10799, 쇠막대기 (0) | 2024.08.25 |
|---|---|
| [JAVA]BOJ 4949, 균형잡힌 세상 (0) | 2024.08.25 |
| [JAVA]BOJ 10866, 덱 (0) | 2024.08.20 |
| [JAVA]BOJ 1966, 프린터 큐 (0) | 2024.08.19 |
| [JAVA]BOJ 10845, 큐 (0) | 2024.08.18 |