Java 코딩테스트 공부/Java 백준 문제풀이

자바 백준 5430번 문제 : AC

daramG 2022. 11. 7. 21:04

문제 출처 : https://www.acmicpc.net/problem/5430

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

 

문제 :

 

 

풀이 :

직접 뒤집는 것 보다 Deque를 이용해 Reverse 유무를 체크하며 앞과 뒤에서 삭제하는 것이 좋다.

 

 

소스코드 :

import java.util.*;
import java.io.*;
public class Main {
	public StringBuilder solution(String funcArr, int arrSize, Deque dq) {
		StringBuilder sb = new StringBuilder();
		boolean isReverse = false;
		for(char c : funcArr.toCharArray()) {
			if (c == 'R') {
				if (isReverse == false) isReverse = true;
				else if (isReverse == true) isReverse = false;
			}
			else if (c == 'D') {
				if (dq.isEmpty()) {
					sb.setLength(0);
					sb.append("error");
					return sb;
				} 
				else {
					if (isReverse == false) dq.removeFirst();
					else if (isReverse == true) dq.removeLast();
				}
			}
		}
		// 출력하기
		sb.append('[');
		if (isReverse == false && dq.isEmpty() == false) {
			sb.append(dq.poll());
			while(dq.size() > 0) {
				sb.append(',').append(dq.poll());
			}
		}
		else if (isReverse == true && dq.isEmpty() == false) {
			sb.append(dq.pollLast());
			while(dq.size() > 0) {
				sb.append(',').append(dq.pollLast());
			}
		}
		sb.append(']');
		return sb;
	}
    
	public static void main(String[] args) throws IOException {
	    Main T = new Main();
	    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	    int n = Integer.parseInt(br.readLine());
		while(n-->0) {
			String funcArr = br.readLine();
			int arrSize = Integer.parseInt(br.readLine());
			StringTokenizer st = new StringTokenizer(br.readLine(), "[,]");
			Deque<Integer> dq = new ArrayDeque<>();
			for(int i=0; i<arrSize; i++) dq.add(Integer.parseInt(st.nextToken()));
			System.out.println(T.solution(funcArr, arrSize, dq));
		}
		br.close();
	}
}

 

 

문제풀이 중 오류발생 :

예외케이스(비어있는 배열)에 대해 '['와 ']'를 리턴해주지 못했다.

예외케이스가 발생해 오류가 발생했다.

R

0

[]

가 입력될 경우

[]를 반환해줘야 하는데, isEmpty() == false일 경우에만 배열 앞뒤로 '['와 ']'를 붙였다.

 

항상 예외 케이스에 대해 생각하고 코드 작성 시 잘 체크해야겠다.

금방 찾아서 다행이지...