본문 바로가기
Problem Solving/Baekjoon

[백준] 10866 덱 - Data Structure / Java

by graycode 2022. 6. 12.

 문제 링크

 

10866번: 덱

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

www.acmicpc.net

 

 풀이 과정

Deque(양방향 Queue) 자료구조에 관련된 기본적인 동작들을 구현하는 문제.

이전에 풀이한 10828, 10845 문제 구현방식에서 switch case 조건문으로 구현하였다.

 

덱은 양방향에서 데이터를 처리할 수 있으므로 그와 관련된 명령어의 정확한 의미를 파악하여 구현해야한다.

덱의 앞, 뒤에 데이터를 삽입하는 명령은 각각 offerFirst(), offerLast() 로 구현,

덱의 앞, 뒤의 데이터를 삭제 및 반환하는 명령은 각각 pollFirst(), pollLast() 로 구현,

덱의 가장 앞에 있는 정수와 뒤에 있는 정수를 반환하는 명령은 각각 peekFirst(), peekLast() 함수로 구현한다.

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayDeque;
import java.util.Deque;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int n = Integer.parseInt(br.readLine());
		Deque<Integer> dq = new ArrayDeque<>();

		for (int i = 0; i < n; i++) {
			String[] comm = br.readLine().split(" ");

			switch (comm[0]) {
			case "push_front":
				dq.offerFirst(Integer.parseInt(comm[1]));
				break;
			case "push_back":
				dq.offerLast(Integer.parseInt(comm[1]));
				break;

			case "pop_front":
				if (dq.isEmpty())
					bw.write(-1 + "\n");
				else
					bw.write(dq.pollFirst() + "\n");
				break;
			case "pop_back":
				if (dq.isEmpty())
					bw.write(-1 + "\n");
				else
					bw.write(dq.pollLast() + "\n");
				break;

			case "size":
				bw.write(dq.size() + "\n");
				break;
			case "empty":
				if (dq.isEmpty())
					bw.write(1 + "\n");
				else
					bw.write(0 + "\n");
				break;
				
			case "front":
				if (dq.isEmpty())
					bw.write(-1 + "\n");
				else
					bw.write(dq.peekFirst() + "\n");
				break;
			case "back":
				if (dq.isEmpty())
					bw.write(-1 + "\n");
				else
					bw.write(dq.peekLast() + "\n");
				break;
			}
		}

		bw.flush();
	}

}

댓글