Hope Everyone Is Happy

[골드5] 5430. AC (Java) 본문

※ 백준 (Baekjoon)/[Java] 문제 풀이 ( Solve the problems)

[골드5] 5430. AC (Java)

J 크 2023. 9. 8. 17:25
728x90
반응형

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! (피드백 감사합니다!)