28 Feb 2024

[Java] 백준 10866번: 덱

10866

풀이 방법

덱을 구현하는 문제이다. Java에서 지원하는 ArrayDeque 등을 사용할 수도 있었지만, 문제에서 원하는 것은 직접 구현이었기 때문에 앞뒤 양쪽에서 push와 pop이 가능한 Deque 자료구조를 직접 구현해봤다.

풀고 나서, 다른 사람들이 어떻게 풀이했는 지 봤는데 대부분은 Deque을 import해서 풀었었다. 그럼에도 코드 실행 시간이 나와 비슷해서 만족!

풀이 코드

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

public class BOJ_10866_덱 {
	static class MyDeque {
		Integer[] deqArray;
		int size;
		
		public MyDeque() {
			deqArray = null;
			this.size = 0;
		}
		
		public void push_front(int num) {
			Integer[] tmp = new Integer[this.size+1];
			tmp[0] = num;
			
			for(int i=0; i<this.size; ++i) {
				tmp[i+1] = deqArray[i];
			}
			
			deqArray = tmp;
			++this.size;
		}
		public void push_back(int num) {
			Integer[] tmp = new Integer[this.size+1];
			tmp[this.size] = num;
			
			for(int i=0; i<this.size; ++i) {
				tmp[i] = deqArray[i];
			}
			
			deqArray = tmp;	
			++this.size;
		}
		public int pop_front() {
			if(this.size == 0) return -1;
			
			Integer[] tmp = new Integer[this.size-1];
			int ret = deqArray[0];

			for(int i=1; i<this.size; ++i) {
				tmp[i-1] = deqArray[i];
			}
			
			deqArray = tmp;
			--this.size;
			
			return ret;
		}
		public int pop_back() {
			if(this.size == 0) return -1;
			
			Integer[] tmp = new Integer[this.size-1];
			int ret = deqArray[this.size-1];

			for(int i=0; i<deqArray.length-1; ++i) {
				tmp[i] = deqArray[i];
			}
			
			deqArray = tmp;
			--this.size;
			
			return ret;
		}
		public int size() {
			return this.size;
		}
		public int empty() {
			return size==0 ? 1 : 0;
		}
		public int front() {
			return size==0 ? -1 : deqArray[0];
		}
		public int back() {
			return size==0 ? -1 : deqArray[size-1];
		}
	}
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		MyDeque deque = new MyDeque();
		StringBuilder sb = new StringBuilder();
		
		for(int i=0; i<T; ++i) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			
			String command = st.nextToken();
			
			switch(command) {
				case "push_back": deque.push_back(Integer.parseInt(st.nextToken())); break;
				case "push_front": deque.push_front(Integer.parseInt(st.nextToken())); break;
				case "pop_back": sb.append(deque.pop_back()).append('\n'); break;
				case "pop_front": sb.append(deque.pop_front()).append('\n'); break;
				case "size": sb.append(deque.size()).append('\n'); break;
				case "empty": sb.append(deque.empty()).append('\n'); break;
				case "front": sb.append(deque.front()).append('\n'); break;
				case "back": sb.append(deque.back()).append('\n'); break;
			}
		}

		System.out.println(sb);
	}

}
Thank You For Reading
SeungJun Jeon

점점 강해지고 있습니다.

comments powered by Disqus