알고리즘 풀이(JAVA) - 백준 알고리즘_5430(AC)


문제

문제 링크 : https://www.acmicpc.net/problem/5430

AC 문제

풀이

  • 이 문제는 앞뒤로 입출력이 가능한 자료 구조인 덱(deque) 을 활용 하여 풀이하면 쉽게 풀 수 있다.

    • R : 방향을 변경할때 배열을 돌리려고 하면 시간초과가 뜨기 때문에 변수(dir)를 선언 하여 방향을 저장 한다.
    • D : 방향(dir) 에 따라서 firstPoll(), LastPoll() 을 활용하여 앞 뒤로 큐를 제거한다.
    • 출력 : 모든 명령어를 수행한뒤 방향(dir)에 따라서 출력 결과를(showPrint()) 생성 한다.

소스

  • AC(5430)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;

public class Baekjoon_5430 {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		//테스트 케이스 수(T)
		int t = Integer.parseInt(reader.readLine());
		for(int i = 0; i < t; i++) {
			//수행할 함수 (P)
			String[] p = reader.readLine().split("");
			//배열의 갯수(N)
			int n = Integer.parseInt(reader.readLine());
			//배열
			String[] x = reader.readLine().replace("[", "").replace("]", "").split(",");
			
			String result = ac(p, n, x);
            //결과 출력
			System.out.println(result);
		}
	}

	private static String ac(String[] p, int n, String[] x) {
		Deque<Integer> dQ = makeDq(n, x);
		String dir = "LEFT";
		
		for (String order : p) {
			if("R".equals(order)) {
				if(dir.equals("LEFT")) {
					dir = "RIGHT";
				}else {
					dir = "LEFT";
				}
			}else if("D".equals(order)) {
				if(dQ.isEmpty()) {
					return "error";
				}else {
					if(dir.equals("LEFT")) {
						dQ.pollFirst();
					}else {
						dQ.pollLast();
					}
				}
			}
		}
		StringBuilder sb = showPrint(dQ, dir);
		return sb.toString();
	}
	
	private static StringBuilder showPrint(Deque<Integer> dQ, String dir) {
		int dqLen = dQ.size();
		StringBuilder sb = new StringBuilder("[");
		for(int i = 0; i < dqLen; i++) {
			if(dir.equals("LEFT")) {
				sb.append(dQ.pollFirst());
			}else {
				sb.append(dQ.pollLast());
			}
			if(!dQ.isEmpty()) sb.append(",");
		}
		sb.append("]");
		return sb;
	}

	private static Deque<Integer> makeDq(int n, String[] x){
		Deque<Integer> dQ = new LinkedList<Integer>();
		for(int i = 0; i < n; i++) {
			dQ.add(Integer.parseInt(x[i]));
		}
		return dQ;
	}
}

Back to blog