백준 28279 덱2[JAVA]

Ga0·2023년 8월 13일
0

baekjoon

목록 보기
85/125

문제 해석

  • 첫번째 줄에 명령어의 수 N을 입력받고, 해당 명령어의 수만큼 한줄씩 명령어를 입력받는다.
  • 입력받은 명령어의 결과 값을 차례대로 출력하면 된다.
  • 명령어의 종류는 아래와 같다.
    1 X: 정수 X를 덱의 앞에 넣는다. (1 ≤ X ≤ 100,000)
    2 X: 정수 X를 덱의 뒤에 넣는다. (1 ≤ X ≤ 100,000)
    3: 덱에 정수가 있다면 맨 앞의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
    4: 덱에 정수가 있다면 맨 뒤의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
    5: 덱에 들어있는 정수의 개수를 출력한다.
    6: 덱이 비어있으면 1, 아니면 0을 출력한다.
    7: 덱에 정수가 있다면 맨 앞의 정수를 출력한다. 없다면 -1을 대신 출력한다.
    8: 덱에 정수가 있다면 맨 뒤의 정수를 출력한다. 없다면 -1을 대신 출력한다.

코드

1

import java.io.*;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;


public class Main {
    static StringBuilder sb = new StringBuilder();
    static Deque<Integer> deque = new ArrayDeque<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

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

        while(N --> 0) {
            st = new StringTokenizer(br.readLine());
            int order = Integer.parseInt(st.nextToken());

            switch (order){
                case 1 : //명령어 1 X : 덱의 앞에 넣는다
                    frontPush(Integer.parseInt(st.nextToken()));
                    break;
                case 2 : //명령어 2 X : 덱의 뒤에 넣는다
                    backPush(Integer.parseInt(st.nextToken()));
                    break;
                case 3 : //명령어 3 : 덱의 맨 앞의 정수를 빼서 출력한다.(없다면 -1)
                    frontPop();
                    break;
                case 4 : //명령어 4 : 덱의 맨 뒤의 정수를 빼서 출력한다.(없다면 -1)
                    backPop();
                    break;
                case 5 : //명령어 5 : 덱에 들어있는 정수의 개수 출력
                    dequeSize();
                    break;
                case 6 : //명령어 6 : 덱이 비어있으면 1 출력 비어있지 않으면 0
                    dequeEmpty();
                    break;
                case 7 : //명령어 7 : 덱에 정수가 있다면 맨 앞의 정수를 출력(없다면 -1)
                    getFront();
                    break;
                case 8 : //명령어 8 : 덱에 정수가 있다면 맨 뒤의 정수를 출력(없다면 -1)
                    getBack();
                    break;
            }
        }
        br.close();
        System.out.println(sb);
    }
    static void frontPush(int element){ //명령어 1 X
        deque.addFirst(element);
    }
    static void backPush(int element){ //명령어 2 X
        deque.addLast(element);
    }
    static void frontPop(){ //명령어 3
        if(deque.isEmpty()){
            sb.append("-1").append("\n");
            return;
        }
        sb.append(deque.pollFirst()).append("\n");
    }
    static void backPop(){ //명령어 4
        if(deque.isEmpty()){
            sb.append("-1").append("\n");
            return;
        }
        sb.append(deque.pollLast()).append("\n");
    }
    static void dequeSize(){ //명령어 5
        sb.append(deque.size()).append("\n");
    }
    static void dequeEmpty(){ //명령어 6
        sb.append(deque.isEmpty()? 1 : 0).append("\n");
    }
    static void getFront(){ //명령어 7
        if(deque.isEmpty()){
            sb.append("-1").append("\n");
            return;
        }
        sb.append(deque.peekFirst()).append("\n");
    }
    static void getBack(){ //명령어 8
        if(deque.isEmpty()){
            sb.append("-1").append("\n");
            return;
        }
        sb.append(deque.peekLast()).append("\n");
    }
}
        

2

import java.io.*;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;


public class Main {
    static StringBuilder sb = new StringBuilder();
    static Deque<Integer> deque = new ArrayDeque<>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

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

        while(N --> 0) {
            st = new StringTokenizer(br.readLine());
            int order = Integer.parseInt(st.nextToken());

            switch (order){
                case 1 : //명령어 1 X : 덱의 앞에 넣는다
                    deque.addFirst(Integer.parseInt(st.nextToken()));
                    break;
                case 2 : //명령어 2 X : 덱의 뒤에 넣는다
                    deque.addLast(Integer.parseInt(st.nextToken()));
                    break;
                case 3 : //명령어 3 : 덱의 맨 앞의 정수를 빼서 출력한다.(없다면 -1)
                    sb.append(deque.isEmpty()? -1 : deque.pollFirst()).append("\n");
                    break;
                case 4 : //명령어 4 : 덱의 맨 뒤의 정수를 빼서 출력한다.(없다면 -1)
                    sb.append(deque.isEmpty()? -1 : deque.pollLast()).append("\n");
                    break;
                case 5 : //명령어 5 : 덱에 들어있는 정수의 개수 출력
                    sb.append(deque.size()).append("\n");
                    break;
                case 6 : //명령어 6 : 덱이 비어있으면 1 출력 비어있지 않으면 0
                    sb.append(deque.isEmpty()? 1 : 0).append("\n");
                    break;
                case 7 : //명령어 7 : 덱에 정수가 있다면 맨 앞의 정수를 출력(없다면 -1)
                    sb.append(deque.isEmpty()? -1 :deque.peekFirst()).append("\n");
                    break;
                case 8 : //명령어 8 : 덱에 정수가 있다면 맨 뒤의 정수를 출력(없다면 -1)
                    sb.append(deque.isEmpty()? -1 : deque.peekLast()).append("\n");
                    break;
            }
        }
        br.close();
        System.out.println(sb);
    }

}
        
  • 문제에 대한 설명은 주석으로 작성해두었다.

결과

1

2

느낀 점

  • 스택, 큐 문제에서 이러한 명령어 수행 문제는 꽤 많이 했던 것 같은 느낌이여서 큰 어려움없이 풀 수 있었다.

0개의 댓글