νμ μ€ν λ¬Έμ λ₯Ό νμλ€λ©΄ 그리 μ΄λ €μ΄ λ¬Έμ κ° μλλ€.
λλ 20002 ν¬κΈ°λ₯Ό κ°μ§ int λ°°μ΄μ μ μΈνμκ³ , first index μ last index λ₯Ό 10000μΌλ‘ μμνμλ€.
first indexμ κ²½μ° push_front μ κ²½μ°μλ μΈλ±μ€λ₯Ό μ μμ°μ°μλ₯Ό ν΅ν΄μ λ¨Όμ κ°μ μμΌ°κ³ , λ°μ΄ν°λ₯Ό κ°λ¦¬ν€κ³ μλ μΈλ±μ€λ‘ μ¬μ©νμκ³
last indexμ κ²½μ° push_back μ κ²½μ°μλ μΈλ±μ€λ₯Ό νμ μ°μ°μλ‘ μ¦κ°μμΌ, λ°μ΄ν°λ₯Ό μ±μΈ κ³³(λ°μ΄ν°κ° μμ±μμ§ κ³³)μ κ°λ¦¬ν€λλ‘ μ€μ νμλ€.
popμ κ²½μ°μλ λ°λλ‘ first indexλ λ°μ΄ν°λ₯Ό κ°λ¦¬ν€κ³ μκΈ° λλ¬Έμ, νμμ°μ°μλ‘ λ°μ΄ν°λ₯Ό λ¨Όμ 보μ¬μ€ ν μ¦κ°μμΌ°κ³
last indexλ μ μμ°μ°μλ‘ λ¨Όμ κ°μμν¨λ€μ λ°μ΄ν°λ₯Ό 보μ¬μ€ μ μλλ‘ κ΅¬ννμλ€.
λ€λ₯Έ λ©μλλ€μ νμ μ€νκ³Ό ν° μ°¨μ΄κ° μλ€~
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
static int first = 10000;
static int last = 10000;
static int[] array = new int[20002];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.valueOf(br.readLine());
for (int i = 1; i <= N; i++) {
String[] input = br.readLine().split(" ");
if (input[0].equals("push_back")) {
push_back(Integer.valueOf(input[1]));
} else if (input[0].equals("push_front")) {
push_front(Integer.valueOf(input[1]));
} else if (input[0].equals("pop_back")) {
pop_back();
} else if (input[0].equals("pop_front")) {
pop_front();
} else if (input[0].equals("size")) {
size();
} else if (input[0].equals("empty")) {
empty();
} else if (input[0].equals("front")) {
front();
} else if (input[0].equals("back")) {
back();
}
}
}
static void push_front(int X) {//push_front X: μ μ Xλ₯Ό λ±μ μμ λ£λλ€.
array[--first] = X;
}
static void push_back(int X) {//push_back X: μ μ Xλ₯Ό λ±μ λ€μ λ£λλ€.
array[last++] = X;
}
static void pop_front() {//pop_front: λ±μ κ°μ₯ μμ μλ μλ₯Ό λΉΌκ³ , κ·Έ μλ₯Ό μΆλ ₯νλ€. λ§μ½, λ±μ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.
if (last - first == 0) {
System.out.println(-1);
} else {
System.out.println(array[first++]);
}
}
static void pop_back() {//pop_back: λ±μ κ°μ₯ λ€μ μλ μλ₯Ό λΉΌκ³ , κ·Έ μλ₯Ό μΆλ ₯νλ€. λ§μ½, λ±μ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.
if (last - first == 0) {
System.out.println(-1);
} else {
System.out.println(array[--last]);
}
}
static void size() {//size: λ±μ λ€μ΄μλ μ μμ κ°μλ₯Ό μΆλ ₯νλ€.
System.out.println(last - first);
}
static void empty() {//empty: λ±μ΄ λΉμ΄μμΌλ©΄ 1μ, μλλ©΄ 0μ μΆλ ₯νλ€.
if (last - first == 0) {
System.out.println(1);
} else {
System.out.println(0);
}
}
static void front() {//front: λ±μ κ°μ₯ μμ μλ μ μλ₯Ό μΆλ ₯νλ€. λ§μ½ λ±μ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.
if (last - first == 0) {
System.out.println(-1);
} else {
System.out.println(array[first]);
}
}
static void back() { //back: λ±μ κ°μ₯ λ€μ μλ μ μλ₯Ό μΆλ ₯νλ€. λ§μ½ λ±μ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.
if (last - first == 0) {
System.out.println(-1);
} else {
System.out.println(array[last - 1]);
}
}
}