백준(JAVA) 풀이/자료 구조

백준(JAVA) 10866번 덱 풀이

개발윗미 2022. 8. 15. 09:13

Java으로 구현한 10866번 덱 문제 풀이입니다.

 

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

 

10866번: 덱

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

www.acmicpc.net


import java.io.*;
import java.util.*;

public class Solution_m {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int n = Integer.parseInt(br.readLine());
		Deque<Integer> data = new ArrayDeque<>();
		
		for (int i=0; i<n; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String state = st.nextToken();
			
			if (state.equals("push_front")) {
				int num = Integer.parseInt(st.nextToken());
				data.addFirst(num);
			} else if (state.equals("push_back")) {
				int num = Integer.parseInt(st.nextToken());
				data.add(num);
			} else if (state.equals("pop_front")) {
				if (data.size() == 0)
					bw.append(-1 + "\n");
				else {
					int num = data.poll();
					bw.append(num + "\n");
				}
			} else if (state.equals("pop_back")) {
				if (data.size() == 0)
					bw.append(-1 + "\n");
				else {
					int num = data.pollLast();
					bw.append(num + "\n");
				}
			} else if (state.equals("size"))
				bw.append(data.size() + "\n");
			else if (state.equals("empty")) {
				if (data.size() == 0)
					bw.append(1 + "\n");
				else
					bw.append(0 + "\n");
			} else if (state.equals("front")) {
				if (data.size() == 0)
					bw.append(-1 + "\n");
				else {
					int num = data.getFirst();
					bw.append(num + "\n");
				}
			} else if (state.equals("back")) {
				if (data.size() == 0)
					bw.append(-1 + "\n");
				else {
					int num = data.getLast();
					bw.append(num + "\n");
				}
			}
		}
		
		bw.flush();
		bw.close();
		br.close();
	}
}

 

1. 입력받은 state 값이 "push_front" 혹은 "push_back"일 경우 아래와 같은 작업을 수행한다.

  - 정수 num을 입력받고, "push_front"일 경우 data 덱의 앞에, "push_back"일 경우 data 덱의 뒤에 삽입한다.

 

2. 입력받은 state 값이 "pop_front" 혹은 "pop_back"일 경우 아래와 같은 작업을 수행한다.

  - 만약 data 덱의 size()가 0일 경우 즉, 값이 없을 경우 -1을 출력한다.

  - 값이 존재하고 state 값이 "pop_front"일 경우 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다.

  - 값이 존재하고 state 값이 "pop_back"일 경우 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다.

 

3. 입력받은 state 값이 "size"일 경우 data 덱의 길이를 출력한다.

 

4. 입력받은 state 값이 "empty"일 경우 아래와 같은 작업을 수행한다.

  - 만약 data 덱의 size()가 0일 경우 즉, 값이 없을 경우 1을 출력한다.

  - data 덱의 size()가 0이 아닐 경우 즉, 값이 존재할 경우 0을 출력한다.

 

5. 입력받은 state 값이 "front" 혹은 "back"일 경우 아래와 같은 작업을 수행한다.

  - 만약 data 덱의 size()가 0일 경우 -1을 출력한다.

  - 값이 존재하고 state 값이 "front"일 경우 덱의 가장 앞에 있는 정수를 출력한다.

  - 값이 존재하고 state 값이 "back"일 경우 덱의 가장 뒤에 있는 정수를 출력한다.