점점 강해지고 있습니다.
[Java] 백준 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