문제 출처 : https://www.acmicpc.net/problem/5430
문제 :
풀이 :
직접 뒤집는 것 보다 Deque를 이용해 Reverse 유무를 체크하며 앞과 뒤에서 삭제하는 것이 좋다.
소스코드 :
import java.util.*;
import java.io.*;
public class Main {
public StringBuilder solution(String funcArr, int arrSize, Deque dq) {
StringBuilder sb = new StringBuilder();
boolean isReverse = false;
for(char c : funcArr.toCharArray()) {
if (c == 'R') {
if (isReverse == false) isReverse = true;
else if (isReverse == true) isReverse = false;
}
else if (c == 'D') {
if (dq.isEmpty()) {
sb.setLength(0);
sb.append("error");
return sb;
}
else {
if (isReverse == false) dq.removeFirst();
else if (isReverse == true) dq.removeLast();
}
}
}
// 출력하기
sb.append('[');
if (isReverse == false && dq.isEmpty() == false) {
sb.append(dq.poll());
while(dq.size() > 0) {
sb.append(',').append(dq.poll());
}
}
else if (isReverse == true && dq.isEmpty() == false) {
sb.append(dq.pollLast());
while(dq.size() > 0) {
sb.append(',').append(dq.pollLast());
}
}
sb.append(']');
return sb;
}
public static void main(String[] args) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
while(n-->0) {
String funcArr = br.readLine();
int arrSize = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), "[,]");
Deque<Integer> dq = new ArrayDeque<>();
for(int i=0; i<arrSize; i++) dq.add(Integer.parseInt(st.nextToken()));
System.out.println(T.solution(funcArr, arrSize, dq));
}
br.close();
}
}
문제풀이 중 오류발생 :
예외케이스가 발생해 오류가 발생했다.
R
0
[]
가 입력될 경우
[]를 반환해줘야 하는데, isEmpty() == false일 경우에만 배열 앞뒤로 '['와 ']'를 붙였다.
항상 예외 케이스에 대해 생각하고 코드 작성 시 잘 체크해야겠다.
금방 찾아서 다행이지...
'Java 코딩테스트 공부 > Java 백준 문제풀이' 카테고리의 다른 글
자바 백준 9935번 문제 : 문자열 폭발 (0) | 2022.11.10 |
---|---|
자바 백준 2470번 문제 : 두 용액 (0) | 2022.11.08 |
자바 백준 18870번 문제 : 좌표 압축 (0) | 2022.11.07 |
자바 백준 2110번 문제 : 공유기 설치 (0) | 2022.11.05 |
자바/C++ 백준 2805번 문제 : 나무 자르기 (1) | 2022.11.04 |