import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); int commandCt = Integer.parseInt(sc.nextLine()); String commandLine = null; ArrayDeck deck = new ArrayDeck(commandCt); for(int i = 1; i <= commandCt; i++){ commandLine = sc.nextLine(); String[] temp = commandLine.split(" "); if(temp[0].equals("push_front")){ deck.push_front(Integer.parseInt(temp[1])); }else if(temp[0].equals("push_back")){ deck.push_back(Integer.parseInt(temp[1])); }else if(temp[0].equals("pop_front")){ System.out.println(deck.pop_front()); }else if(temp[0].equals("pop_back")){ System.out.println(deck.pop_back()); }else if(temp[0].equals("size")){ System.out.println(deck.size()); }else if(temp[0].equals("empty")){ System.out.println(deck.empty()); }else if(temp[0].equals("front")){ System.out.println(deck.front()); }else if(temp[0].equals("back")){ System.out.println(deck.back()); } } sc.close(); } } class ArrayDeck{ private int[] deck; private int rear = -1; public ArrayDeck(int n){ deck = new int[n]; } public void push_front(int value){ rear++;for(int i=rear;i>0;i--){
deck[i]=deck[i-1];
}
deck[0] = value; } public void push_back(int value){ rear++; deck[rear] = value; } public int pop_front(){ if(rear <= -1){ return -1; } int temp = deck[0];for(int i=0;i<rear;i++){
deck[i]=deck[i+1];
}
rear--; return temp; } public int pop_back(){ if(rear <= -1){ return -1; } int temp = deck[rear]; rear--; return temp; } public int size(){ if(rear <= -1){ return 0; }else{ return rear + 1; } } public int empty(){ if(rear <= -1){ return 1; }else{ return 0; } } public int front(){ if(rear <= -1){ return -1; }else{ return deck[0]; } } public int back(){ if(rear <= -1){ return -1; }else{ return deck[rear]; } } }
'알고리즘(Java) > 덱' 카테고리의 다른 글
백준 1021번 회전하는 큐 (0) | 2017.11.29 |
---|---|
백준 1158 조세퍼스 문제 0 (0) | 2017.11.23 |
[자료구조]덱(Deque) (0) | 2017.11.23 |