본문 바로가기
공부 정리/백준

[백준] 자바 10866 덱

by 경적필패. 2021. 7. 19.
반응형

문제

정수를 저장하는 덱(Deque)을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여덟 가지이다.

  • push_front X: 정수 X를 덱의 앞에 넣는다.
  • push_back X: 정수 X를 덱의 뒤에 넣는다.
  • pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 덱에 들어있는 정수의 개수를 출력한다.
  • empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.
  • front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

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

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.


테스트 케이스

초록색 입력 / 검은색 출력

 

 


접근

하나의 수를 입력받고, 그 수만큼 명령어를 입력받아 수행하는 문제입니다.

명령어가 총 여덟 가지로 각각을 구현해주면 됩니다.

저 같은 경우 자바 deque 클래스를 이용해서 쉽게 문제를 해결하였습니다.

 


코드

import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;

public class Main {

	/*
 	 16165 problem
	*/
	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		Deque<Integer> dq = new ArrayDeque<>();
		int input = Integer.parseInt(br.readLine());
		int num =0;
		
		for(int i=0; i<input; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String command = st.nextToken();
			
			//push_back
			if(command.equals("push_back")) {
				num = Integer.parseInt(st.nextToken());
				dq.addLast(num);
			}
			//push_front
			else if(command.equals("push_front")) {
				num = Integer.parseInt(st.nextToken());
				dq.addFirst(num);
			}
			//pop_front
			else if(command.equals("pop_front")){
				if(dq.isEmpty()) {
					System.out.println(-1);
					continue;
				}
				System.out.println(dq.removeFirst());
			}
			//pop_back
			else if(command.equals("pop_back")) {
				if(dq.isEmpty()) {
					System.out.println(-1);
					continue;
				}
				System.out.println(dq.removeLast());
			}
			//size
			else if(command.equals("size")) {
				System.out.println(dq.size());
			}
			//empty
			else if(command.equals("empty")) {
				if(dq.isEmpty()) {
					//System.out.println(dq.isEmpty());
					System.out.println(1);
				}
				else {
					System.out.println(0);
				}
			}
			//front
			else if(command.equals("front")) {
				if(dq.isEmpty()) {
					System.out.println(-1);
					continue;
				}
				System.out.println(dq.getFirst());
			}
			//back
			else if(command.equals("back")) {
				if(dq.isEmpty()) {
					System.out.println(-1);
					continue;
				}
				System.out.println(dq.getLast());
			}
		}
		bw.flush();
		bw.close();
	}
	
}

주의

x

 

반응형

댓글