백준 5430번: AC [Deque][덱][문자열][자료구조] -Java :: 매운코딩
728x90
300x250

 

https://www.acmicpc.net/problem/5430

 

5430번: AC

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

www.acmicpc.net

 

Deque 개념만 알면 손쉽게 구할 수 있으나..

문제를 꼼꼼히 읽어야만 풀 수 있었다.

16%에서 계속 틀렸습니다가 나와서 반례를 찾다가  놓친부분을 발견..

 

<체크해봐야 할 것들>

1. 정렬(asc, desc)이 아닌 뒤집기임

2. 출력시 , 콤마 뒤의 공백이 나오면 안됨

3. 2자리수 숫자 체킹 등..

4. n = 0 일 경우를 고려할 것

 

<반례>

3
D
1
[22]
R
0
[]
RDD
4
[1,2,3,4]


------------------------------------
결과:
[]
[]
[2,1]

 

3
D
0
[]
RDD
1
[42]
RD
0
[]

--------------------
결과:
error
error
error

 

 

<Java 코드>

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;
import java.util.StringTokenizer;
import java.util.stream.Collectors;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		//System.setIn(new FileInputStream("Test.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int T = Integer.parseInt(st.nextToken());
		
		for (int tc = 0; tc < T; tc++) {
			
			
			st = new StringTokenizer(br.readLine());
			String p = st.nextToken();
			
			st = new StringTokenizer(br.readLine());
			int n = Integer.parseInt(st.nextToken());
			
			st = new StringTokenizer(br.readLine());
			String sarr = st.nextToken();
			sarr = sarr.replace("[","");
			sarr = sarr.replace("]","");
			String[] arr = sarr.split(",");
			
			Deque dq = new LinkedList<>();
			for (int i = 0; i < n; i++) {
				dq.add(arr[i]);
			}
			
//			System.out.println(dq);
			
			String res = "[]";
			//함수실행
			boolean isfront = true; //뒤집힘여부, true면 정방향, false면 역방향
			for (int i = 0; i < p.length(); i++) {
//				System.out.println(p.charAt(i)+" // "+dq);
				if(p.charAt(i) == 'R') {
					isfront = (isfront) ? false:true;
					
					
				} else {
					//배열이 비어있는데 D를 사용한 경우
					if(dq.isEmpty()) {
						res = "error";
						break;
					}
					
					//뒤집혔나요?
					if(isfront) {
						dq.pollFirst();
					} else {
						dq.pollLast();
					}
				}
			}
			
			if(!dq.isEmpty()) {
				if(isfront) {
					System.out.println("["+dq.stream()
					.map(String::valueOf)
					.collect(Collectors.joining(","))+"]");
					
				} else {
					System.out.print("["+dq.pollLast());
					while(!dq.isEmpty()) {
						System.out.print(","+dq.pollLast());
					}
					System.out.println("]");
				}
			} else {
				System.out.println(res);
			}
			
		}
	}

}
728x90

+ Recent posts