π λ¬Έμ μ€λͺ
μ μλ₯Ό μ μ₯νλ λ±μ ꡬννκ³ , λ±μμ μ¬μ© λλ 8κ°μ§ 컀맨λλ₯Ό ꡬννλΌ.
push_front X
: μ μ Xλ₯Ό λ±μ μμ λ£λλ€.push_back X
: μ μ Xλ₯Ό λ±μ λ€μ λ£λλ€.pop_front
: λ±μ κ°μ₯ μμ μλ μλ₯Ό λΉΌκ³ , κ·Έ μλ₯Ό μΆλ ₯νλ€. λ§μ½, λ±μ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.pop_back
: λ±μ κ°μ₯ λ€μ μλ μλ₯Ό λΉΌκ³ , κ·Έ μλ₯Ό μΆλ ₯νλ€. λ§μ½, λ±μ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.size
: λ±μ λ€μ΄μλ μ μμ κ°μλ₯Ό μΆλ ₯νλ€.empty
: λ±μ΄ λΉμ΄μμΌλ©΄ 1μ, μλλ©΄ 0μ μΆλ ₯νλ€.front
: λ±μ κ°μ₯ μμ μλ μ μλ₯Ό μΆλ ₯νλ€. λ§μ½ λ±μ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.back
: λ±μ κ°μ₯ λ€μ μλ μ μλ₯Ό μΆλ ₯νλ€. λ§μ½ λ±μ λ€μ΄μλ μ μκ° μλ κ²½μ°μλ -1μ μΆλ ₯νλ€.
π‘ μμ΄λμ΄
- μλ° κ³΅μ λ¬Έμμ κΆμ₯μ λ°λΌ
ArrayDeque
μ μ¬μ©νμ¬ λ±μ ꡬννλ€. 곡μ λ¬Έμ - if - elseλ‘ μμΈ μ²λ¦¬λ₯Ό ν΄λκΈ΄ νμ§λ§, λ μμ μ μΈ ν¨μμΈ
.poll
.peek
μ μ¬μ©νμ¬ μ»€λ§¨λλ₯Ό ꡬννλ€.
π μ½λ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Deque<Integer> deque = new ArrayDeque<>();
while (N-- > 0) {
String command = br.readLine();
// [1] push_front
if (command.startsWith("push_front")) {
int X = Integer.parseInt(command.split(" ")[1]);
deque.addFirst(X); // λ± μμ μ½μ
// [2] push_back
} else if (command.startsWith("push_back")) {
int X = Integer.parseInt(command.split(" ")[1]);
deque.addLast(X); // λ± λ€μ μ½μ
// [3] pop_front
} else if (command.equals("pop_front")) {
if (!deque.isEmpty()) {
System.out.println(deque.pollFirst());
} else {
System.out.println(-1);
}
// [4] pop_back
} else if (command.equals("pop_back")) {
if (!deque.isEmpty()) {
System.out.println(deque.pollLast());
} else {
System.out.println(-1);
}
// [5] size
} else if (command.equals("size")) {
System.out.println(deque.size());
// [6] empty
} else if (command.equals("empty")) {
System.out.println((deque.isEmpty()) ? 1 : 0);
// [7] front
} else if (command.equals("front")) {
if (!deque.isEmpty()) {
System.out.println(deque.peekFirst());
} else {
System.out.println(-1);
}
// [8] back
} else if (command.equals("back")) {
if (!deque.isEmpty()) {
System.out.println(deque.peekLast());
} else {
System.out.println(-1);
}
}
}
}
}
β± μκ°λ³΅μ‘λ
μ΄ μ»€λ§¨λμ μλ₯Ό Nμ΄λΌ ν λ, κ° λͺ
λ Ήμ΄λ ArrayDequeμ λ©μλ (addFirst
, pollLast
, peekFirst
λ±)λ₯Ό μ¬μ©νλ―λ‘ κ° μ°μ°μ O(1) μκ°μ μνλλ€.
λ°λΌμ μ 체 컀맨λμ λν μ΄ μκ° λ³΅μ‘λλ O(N) μ΄λ€.
βοΈ λλ μ
- μ€ν, ν, λ±μ ꡬννλ κΈ°μ΄ 3λ¬Έμ λ₯Ό μ λΆ νμλλ°, λ§μ λμμ΄ λ κ² κ°λ€.
- μ μ¬ λ¬Έμ λ μ€μ€λ‘ λ°μμ΄ κ°λ₯ν΄μ‘λ€.