본문 바로가기

알고리즘 풀이(JAVA)/백준

[백준] 문제번호 10866(덱)(실버 4)(java)

<문제 10866 - 덱>

[문제]

 

[답안]

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayDeque;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        ArrayDeque<Integer> dq = new ArrayDeque<Integer>(); // 덱 선언
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine()); // 주어지는 명령의 수

        for (int i = 0; i < N; i++) {
            String[] s = br.readLine().split(" "); // 문자열 받기

            switch (s[0]) { // 각 경우에 해당하는 값이 들어올 때 구분하기 위한 switch문
                case "push_front": {
                    dq.addFirst(Integer.parseInt(s[1]));
                    break;
                }
                case "push_back": {
                    dq.addLast(Integer.parseInt(s[1]));
                    break;
                }
                case "pop_front": {
                    if (dq.isEmpty()) {
                        sb.append(-1).append('\n');
                    }
                    else {
                        sb.append(dq.pollFirst()).append('\n');
                    }
                    break;
                }
                case "pop_back": {
                    if (dq.isEmpty()) {
                        sb.append(-1).append('\n');
                    }
                    else {
                        sb.append(dq.pollLast()).append('\n');
                    }
                    break;
                }
                case "size": {
                    sb.append(dq.size()).append('\n');
                    break;
                }

                case "empty": {
                    if (dq.isEmpty()) {
                        sb.append(1).append('\n');
                    }
                    else {
                        sb.append(0).append('\n');
                    }
                    break;
                }
                case "front": {
                    if (dq.isEmpty()) {
                        sb.append(-1).append('\n');
                    }
                    else {
                        sb.append(dq.peekFirst()).append('\n');
                    }
                    break;
                }
                case "back": {
                    if (dq.isEmpty()) {
                        sb.append(-1).append('\n');
                    }
                    else {
                        sb.append(dq.peekLast()).append('\n');
                    }
                    break;
                }
            }
        }
        System.out.println(sb);
        br.close();
    }
}

출처

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

 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net