https://www.acmicpc.net/problem/5430
구현 문제입니다.
문제 접근 순서는 다음과 같습니다.
- R이면 방향을 바꾼다.
- D이면 포인터를 옮겨 범위를 줄인다.
- 정방향일 경우 왼쪽의 포인터를 옮겨 범위를 줄인다.
- 역방향일 경우 오른쪽의 포인터를 옮겨 범위를 줄인다.
Deque를 통해 문제를 해결할 수도 있겠지만, 배열을 사용해 처리 속도를 높였습니다.
[구현 코드]
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int testCase = Integer.parseInt(br.readLine());
while (testCase-- > 0) {
char[] orders = br.readLine().toCharArray();
int n = Integer.parseInt(br.readLine());
String[] arr = br.readLine()
.replace("[", "")
.replace("]", "")
.split(",");
boolean direction = true;
int left = 0;
int right = n - 1;
boolean error = false;
for (int i = 0; i < orders.length; i++) {
char order = orders[i];
// R이면 방향을 바꾼다.
if (order == 'R') {
direction = !direction;
} else {
if (left > right) {
error = true;
break;
}
if (direction) { // 정방향일 경우 왼쪽의 포인터를 옮겨 범위를 줄인다.
left++;
} else { // 역방향일 경우 오른쪽의 포인터를 옮겨 범위를 줄인다.
right--;
}
}
}
StringBuilder result = new StringBuilder();
if(error){
result.append("error");
}else{
result.append("[");
if(direction){
for(int i=left; i<=right; i++){
result.append(arr[i]).append(",");
}
}else{
for(int i=right; i>=left; i--){
result.append(arr[i]).append(",");
}
}
// 결과 내부에 숫자 하나라도 있을 경우 맨 마지막에 ','가 추가되므로 ','삭제
if(result.length() > 1) result.deleteCharAt(result.length()-1);
result.append("]");
}
bw.write(result + System.lineSeparator());
}
bw.flush();
bw.close();
br.close();
}
}
'알고리즘' 카테고리의 다른 글
백준 - 5052 전화번호 목록(Java) (0) | 2023.03.28 |
---|---|
백준 - 20166 문자열 지옥에 빠진 호석(Java) (0) | 2023.03.28 |
프로그래머스 - 광물 캐기(Java) (0) | 2023.03.27 |
백준 - 13460 구슬 탈출 2(Java) (0) | 2023.03.23 |
프로그래머스 - 당구 연습(Java) (0) | 2023.03.22 |