Languages/Java
[BOJ 길라잡이/Java] 5일차 #10866 덱
효딩
2025. 3. 11. 12:59
알고리즘 분류
- 구현
- 자료 구조
- 덱
이전에 풀었던 큐와 비슷한데
이번엔 데크(덱) 이다!
파이썬에만 Deque가 따로 있는줄 알았던 나 반성해..
우리 자바 미안하다
너랑 점점 친해지고 있는 것 같아서 좋아
큐와 동일하게
Deque<Integer> dq = new LinkedList<>();
로 덱을 생성해준 후 나머지는 동일하게 풀었다.
덱(Deque)
Double-Ended Queue의 줄임말
큐의 양쪽으로 엘리먼트의 삽입과 삭제를 수행할 수 있는 자료구조를 의미한다.
어떤 쪽으로 입력하고 어떤 쪽으로 출력하느냐에 따라 스택(Stack)으로 사용할 수도 있고,
큐(Queue)로도 사용할 수 있다.
그냥 큐와는 다른 덱의 메소드들
addFirst(), offerFirst()
덱의 앞쪽에 값을 추가한다.
pollLast(), removeLast()
덱의 마지막 값을 제거한다.
peekLast()
덱의 마지막 값을 제거하지 않고 리턴한다.
import java.util.*;
import java.io.*;
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> dq = new LinkedList<>();
int num = 0;
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String com = st.nextToken();
if (com.equals("push_back")) {
num = Integer.parseInt(st.nextToken());
dq.offer(num);
}
else if (com.equals("push_front")) {
num = Integer.parseInt(st.nextToken());
dq.offerFirst(num);
}
else if (com.equals("pop_front")) {
if (dq.size() == 0) {
System.out.println(-1);
} else {
System.out.println(dq.poll());
}
}
else if (com.equals("pop_back")) {
if (dq.size() == 0) {
System.out.println(-1);
} else {
System.out.println(dq.pollLast());
}
}
else if (com.equals("size")) {
System.out.println(dq.size());
}
else if (com.equals("empty")) {
if (dq.size() == 0) {
System.out.println(1);
} else {
System.out.println(0);
}
}
else if (com.equals("front")) {
if (dq.size() == 0) {
System.out.println(-1);
} else {
System.out.println(dq.peek());
}
}
else if (com.equals("back")) {
if (dq.size() == 0) {
System.out.println(-1);
} else {
System.out.println(dq.peekLast());
}
}
}
}
}