실제로 문자열을 뒤집으면 시간초과가 난다.
따라서 boolean형 변수 Reverse를 선언하고 만약 R이 들어오면 reverse != reverse 로 변경해주자
밑 코드는 for문마다 결과값을 ArrayList에 저장해야해서 마지막에 배열을 뒤집어서 저장했다
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class B5430 {
static ArrayList<Integer> intArr = new ArrayList<>();
static ArrayList<String> resArr = new ArrayList<>();
static boolean reverse;
static char[] charArr;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=0; i<N; i++){
reverse = false;
charArr = sc.next().toCharArray();
int n = sc.nextInt();
// 문자열 입력받고 숫자만 int변환후 int배열에 저장
String[] str = sc.next().replaceAll("\\[","").replaceAll("]","").split(",");
if(n>0){
for (String s : str) {
intArr.add(Integer.parseInt(s));
}
}
calc();
intArr.clear();
}
for(String s : resArr){
System.out.println(s);
}
}
private static void calc() {
boolean error = false;
for(char c : charArr){
if(c=='R'){
// 실제로 뒤집으면 시간초과 따라서 reverse를 지정해두고
// 마지막 reverse가 true면 뒤집어서 출력하고
// 아니면 그냥 출력
reverse = !reverse;
} else if(c=='D'){
if(intArr.size()<=0){
error = true;
break;
}else{
//만약 reverse 상태면 제일 뒷쪽의 숫자를 제거해줘야한다
if(reverse) intArr.remove(intArr.size()-1);
if(!reverse) intArr.remove(0);
}
}
}
if(error){
resArr.add("error");
}else{
if (reverse) {
Collections.reverse(intArr);
}
resArr.add(intArr.toString().replace(" ",""));
}
}
}
'연습문제 > JAVA' 카테고리의 다른 글
[백준 java] 1717 - 집합의 표현 (Union-find) (0) | 2022.08.25 |
---|---|
1717-집합의 표현 (오답) (0) | 2022.08.24 |
[백준 java] 3190-뱀 (0) | 2022.08.22 |
[백준 java] 9012-괄호 (0) | 2022.08.20 |
[백준 java] 3197-백조의 호수 (0) | 2022.08.18 |