본문 바로가기

문제풀기/백준 문제풀이

[알고리즘] 데크 문제 풀이(백준 10866번)

728x90
반응형

1. 덱(백준 10866번)

 

10866번: 덱 (acmicpc.net)

 

10866번: 덱

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

www.acmicpc.net

 

▷ 풀이 코드

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

public class Main {
	
	public static void main(String args[]) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
				
		Deque<Integer> deque = new ArrayDeque<>();

		int num = Integer.parseInt(br.readLine());
		
			
		for(int i=0; i<num; i++) {
			String behav[] = br.readLine().split(" ");
			
			switch (behav[0]) {
			case "push_front": 
				deque.addFirst(Integer.parseInt(behav[1]));
				break;
			case "push_back": 
				deque.addLast(Integer.parseInt(behav[1]));
				break;
			case "pop_front" : 
				sb.append(deque.isEmpty()?-1:deque.pollFirst()).append("\n");
				break;
			case "pop_back" : 
				sb.append(deque.isEmpty()?-1:deque.pollLast()).append("\n");
				break;
			case "size" : sb.append(deque.size()).append("\n");
				break;
			case "empty" : sb.append(deque.isEmpty()?1:0).append("\n");
				break;
			case "front" : sb.append(deque.isEmpty()?-1:deque.peekFirst()).append("\n");
				break;
			case "back" : sb.append(deque.isEmpty()?-1:deque.peekLast()).append("\n");
				break;
			}
		}
		System.out.println(sb);

	}
}

 

이번에는 알고리즘 스터디에서 공부했던 Stack(스택)과 Queue(큐)를 결합한 구조인 Deque(데크)를 통해 백준 문제 풀이를 해보았습니다!!

 

Deque는 스택과 같이 마지막에 넣었던 값들을 출력할 수 있고 큐와 같이 첫 번째 넣었던 값을 출력할 수도 있네요

 

확실히 스택과 큐에 비해 원하는 맨 앞, 맨 뒤에서 사용할 수 있다는 점이 유용하네요!!

 

더 다양한 문제들을 풀어보면서 문제 풀이 방법들에 대해서 익혀볼게요~

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

 

 

 

 

728x90
반응형