https://www.acmicpc.net/problem/5430
풀이 생각
// 테스트 케이스 갯수 // 함수동작 찢어서 해당 FUNCTION별로 움직이게 // ARRAYDEQUE 사용. //deque에 담고 상황에 따라 어떻게 뽑아줄것인지
Main
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringTokenizer st;
//테스트 케이스 갯수 만큼 만들기 , 3줄
for (int i = 0; i <T ; i++) {
String fun= br.readLine();
N =Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(),"[],");
d = new ArrayDeque<>();
for (int j = 0; j < N; j++) {
d.add(Integer.parseInt(st.nextToken()));
}
FunctionRun(d,fun);
}
System.out.println(sb);
}
Function 구현부
static void FunctionRun(ArrayDeque d, String fun){
//fun 분할.
int len = fun.length();
boolean Run = true;
Character [] str =new Character[len];
for (int i = 0; i < len; i++) {
str[i] = fun.charAt(i);
if(str[i] == 'R'){
Run= !Run;
continue;
}
if(Run){
if(d.pollFirst() ==null){
sb.append("error\n");
return;
}
}else{
if(d.pollLast() ==null){
sb.append("error\n");
return;
}
}
}
StringSum(d,Run);
}
출력 result 부분
static void StringSum(ArrayDeque d, boolean Run){
//이제 조합
sb.append('[');
if (d.size()>0){
if(Run){
sb.append(d.pollFirst());
while(!d.isEmpty()){
sb.append(',').append(d.pollFirst());
}
}else{
sb.append(d.pollLast());
while(!d.isEmpty()){
sb.append(',').append(d.pollLast());
}
}
}
sb.append(']').append('\n');
}
tokenizer를 활용해서 split 느낌으로 잘라내는 법 " " 말고 다른 사용법.
Stringbuilder를 이용해서 원하는 타이밍에 붙이고 자르는 방법에 대해 고민해봄.
boolean을 통해 분기를 나누는 방식도 직관적으로 이해가 잘되었다.