[골드5] 5430. AC (Java)
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
에이씨,,,
※ 문제를 요약하면 아래와 같습니다.
▶ 새로운 언어 AC는 정수 배열 연산을 하기위해 선영님이 만든 언어
▶ R은 배열에 있는 수의 순서를 반대로 설정
▶ D는 배열에서 첫번째 수를 버리는 함수
▶ 비어있는 배열에서 D 진행시 에러 출력
▶ 배열과 AC언어가 주어졌을 때 결과 출력
▶ Input : 첫째 줄에 테스트 케이스 T
: 각 테스트 케이스 별 첫번째 줄은 AC언어 (R과D로 구성)
: 배열의 갯수
: 배열의 갯수 만큼 배열 원소 입력
▶ Output : 결과 배열 or error 출력
◈ Input - 1
4
RDD
4
[1,2,3,4]
DD
1
[42]
RRD
6
[1,1,2,3,5,8]
D
0
[]
◈ Output - 1
[2,1]
error
[1,2,3,5,8]
error
◎ 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.
▶ 배열의 원소는 [ ~, ~, ...] 형태로 입력 되므로 구분하여 덱(Deque)구조로 저장
▶ 앞에서 부터 삭제 및 조회, 뒤에서 부터 삭제 및 조회를 보다 편하게 하기 위해 덱 구조 사용
▶ 'R' 입력 여부를 boolean 변수로 저장
▶ 'D' 입력 시 덱의 맨 앞 out 'R'상태일 경우 덱의 맨 뒤out, 배열이 비어있을 경우 error 출력
▶ 연산 종료 후 'R'상태 체크하여 맨 앞 or 맨 뒤 부터 순서대로 배열을 출력 ( 공백일 경우 '[]' 출력 )
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static int[] narr;
static boolean[] barrVisited;
public static void main(String[] args) throws IOException {
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));
int nTestcase = Integer.parseInt(bReader.readLine());
for (int t = 1; t <= nTestcase; t++) {
Deque<Integer> dequeAC = new ArrayDeque<>();
boolean bReverse = false;
String strAC = bReader.readLine();
int nSize = Integer.parseInt(bReader.readLine());
// 쉼표 구분자로 나눠 받기
StringTokenizer strArr = null;
strArr = new StringTokenizer(bReader.readLine(), ",");
// 처음과 끝에 대괄호 지워줘
String strTemp;
for (int i = 0; i < nSize; i++) {
strTemp = strArr.nextToken();
if (i == 0 || i == nSize - 1) {
strTemp = strTemp.replace("[", "");
strTemp = strTemp.replace("]", "");
}
// 덱에 넣어줘
dequeAC.add(Integer.parseInt(strTemp));
}
boolean bError = false;
for (int i = 0; i < strAC.length(); i++) {
if (strAC.charAt(i) == 'R')
bReverse = !bReverse;
else if (strAC.charAt(i) == 'D') {
if (dequeAC.isEmpty()) {
bWriter.write("error");
bError = true;
break;
}
if (!bReverse)
dequeAC.pollFirst();
else
dequeAC.pollLast();
}
}
int nDequeSize = dequeAC.size();
if (!bError) {
bWriter.write("[");
if (!bReverse) {
for (int i = 0; i < nDequeSize; i++) {
if (i == 0)
bWriter.write(String.valueOf(dequeAC.pollFirst()));
else
bWriter.write("," + dequeAC.pollFirst());
}
} else {
for (int i = 0; i < nDequeSize; i++) {
if (i == 0)
bWriter.write(String.valueOf(dequeAC.pollLast()));
else
bWriter.write("," + dequeAC.pollLast());
}
}
bWriter.write("]");
}
bWriter.write("\n");
}
bWriter.flush();
bWriter.close();
}
}
테스트 하려고 넣어논 코드를 계속 제출하다가 null 오류가 계속 떴네요.. ㅠㅠ 더 신중하게 풀겠습니다!!
Good Luck! (피드백 감사합니다!)