본문 바로가기
백준/자료구조

백준 10866. 덱

by 29살아저씨 2021. 11. 5.
반응형

🅰 백준 10866. 덱

 

10866번: 덱

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

www.acmicpc.net

✏️ 문제 풀이

  • 덱을 풀기 위한 가장 기본적인 문제이다.
  • 덱에대한 개념이 궁금하다면 ?
 

[Deque] queue(큐)와 stack(스택)을 둘 다 사용할 수 있는 deque(덱)

* Deque란? - 덱은 Double-Ended Queue의 줄임말로 큐의 양쪽에 데이터를 넣고 뺼 수 있는 형태의 자료구조이다.  하나의 자료구조에 queue와 stack을 사용할 수 있다 생각하면 된다. 덱(Deque)은 어떤 쪽으로

thsd-stjd.tistory.com

  • 나는 라이브러리를 사용하여 문제를 풀었고, 위의 개념을 읽고 온다면 쉽게 코드를 이해할 수 있을 것이다. 그러므로 해설은 넘어가도록 하겠다.
  • 문제를 풀면서 느꼈던 점은 나는 String전체를 읽어왔는데, 백준에서 시간을 짧게 푼 사람들의 코드를 보면 String내에서도 앞글자, 중간글자 즉, chatAt(x)를 이용하여 한글자만 따와서 유일값을 만든 뒤에 비교하여 출력하는 것이였다. 
  • String을 전부 비교하는 것 보다는 훨씬 빠를 것이라 생각했다. 문제를 풀때 새로운 시각을 알게 되었다.

✏️ 소스코드

package codingtestPractice.실버.백준_실버4_덱;

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

public class 백준_10866 {
	static Deque<Integer> deque = new ArrayDeque<>();

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int N = Integer.parseInt(br.readLine());
		for (int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String text = null;
			int num = 0;
			if (st.countTokens() == 2) {
				text = st.nextToken();
				num = Integer.parseInt(st.nextToken());
				if (text.equals("push_front")) {
					deque.addFirst(num);
				} else if (text.equals("push_back")) {
					deque.add(num);
				}
			} else {
				text = st.nextToken();
				switch (text) {
				case "front":
					if (checksize()) // 만약 비어있다면
						sb.append("-1");
					else 
						sb.append(deque.peek());
					break;
				case "back":
					if (checksize()) // 만약 비어있다면
						sb.append("-1");
					else 
						sb.append(deque.peekLast());
					break;
				case "pop_front":
					if (checksize()) // 만약 비어있다면
						sb.append("-1");
					else 
						sb.append(deque.poll());
					break;
				case "pop_back":
					if (checksize()) // 만약 비어있다면
						sb.append("-1");
					else 
						sb.append(deque.pollLast());
					break;
				case "size":
					sb.append(deque.size());
					break;
				case "empty":
					if (checksize()) // 만약 비어있다면
						sb.append(1);
					else 
						sb.append(0);
					break;
				}
				sb.append("\n");
			}
		}
		System.out.println(sb);
	}

	private static boolean checksize() {
		if (deque.isEmpty()) {
			return true;
		}
		return false;
	}

}

 

✅ 후기

  • 덱에대한 개념이 없었는데 이번 문제를 풀면서 덱에대해 조금은 더 알게되었다. 하지만 큐와 스택이 더 유명한 이유는 뭘까? 덱의 장 단점을 더 공부해봐야겠다.
반응형

'백준 > 자료구조' 카테고리의 다른 글

백준 2824. 최대공약수  (0) 2021.11.05

댓글