CodingTEST
[백준 5430] AC (JAVA)
경걍
2024. 1. 6. 05:42
반응형
백준 5430번 문제 - AC
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
문제 분석
- 숫자배열을 새로운 언어 AC로 처리했을 때, 결과 배열를 출력해라.
- AC 규칙
- R : 배열에 있는 수의 순서를 뒤집는 함수
- D : 첫 번째 수를 버리는 함수 (배열이 비어있는데 D를 사용한 경우에는 에러가 발생)
해결 포인트
- Deque 이용
- 뒤 출력 앞 출력 둘 다 가능하기 때문 (R 사용 편리)
- R 사용 시, 뒤에서부터 출력할지 앞에서부터 출력할지 여부를 체크하는 변수 구현
- boolean popFirst : 앞에서부터 출력하면 true, 뒤에서부터 출력하면 false
- D 사용 시, popFirst 확인해서 true면 pollFirst(), false면 pollLast() 실행
- Error 체크하는 변수 구현 ( boolean isError )
코드
import java.io.*;
import java.util.*;
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 T = Integer.parseInt(br.readLine());
for (int t = 0; t < T; t++) {
String command = br.readLine();
int N = Integer.parseInt(br.readLine());
String s = br.readLine();
Deque<Integer> nums = new LinkedList<>();
if(s.length() > 2) {
s = s.substring(1, s.length() - 1);
String[] split = s.split(",");
for (int i = 0; i < N; i++) {
nums.add(Integer.parseInt(split[i]));
}
}
boolean popFirst = true;
boolean isError = false;
for (int i = 0; i < command.length(); i++) {
char value = command.charAt(i);
if (value == 'R') {
popFirst = !popFirst;
} else if (value == 'D') {
if (nums.isEmpty()) {
isError = true;
break;
}
if (popFirst) {
nums.pollFirst();
} else {
nums.pollLast();
}
}
}
if (isError) {
bw.write("error\n");
} else {
bw.write("[");
if(popFirst) {
for (int j = nums.size()-1; j > 0; j--) {
bw.write(nums.pollFirst() + ",");
}
if(!nums.isEmpty())
bw.write(nums.pollFirst().toString());
}
else {
for (int j = nums.size()-1; j > 0; j--) {
bw.write(nums.pollLast() + ",");
}
if(!nums.isEmpty())
bw.write(nums.pollLast().toString());
}
bw.write("]\n");
}
}
bw.flush();
bw.close();
}
}
반응형