이번엔 덱을 구현하는 문제이다.
우선 큐는 한쪽 방향만으로 추가/삭제 가능하다. 하지만 덱은 양쪽 끝에 추가 또는 삭제가 가능하다.
이 문제의 구현하는 방법은 단순히 기본적인 Deque의 개념만 알면 된다.
import java.io.*;
import java.util.Deque;
import java.util.LinkedList;
public class Q10866 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.valueOf(br.readLine());
Deque<Integer> deque = new LinkedList<>();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < T; i++) {
String input = br.readLine().trim();
if(input.startsWith("push_front"))
deque.offerFirst(Integer.valueOf(input.substring(11)));
else if(input.startsWith("push_back"))
deque.offerLast(Integer.valueOf(input.substring(10)));
else if(input.equals("pop_front"))
sb.append(((deque.isEmpty()) ? -1 : deque.poll())+"\n");
else if(input.equals("pop_back"))
sb.append(((deque.isEmpty()) ? -1 : deque.pollLast())+"\n");
else if(input.equals("size"))
sb.append(deque.size()+"\n");
else if(input.equals("empty"))
sb.append(((deque.isEmpty()) ? 1 : 0) +"\n");
else if(input.equals("front"))
sb.append(((deque.isEmpty()) ? -1 : deque.peek())+"\n");
else if(input.equals("back"))
sb.append(((deque.isEmpty()) ? -1 : deque.peekLast())+"\n");
}
System.out.println(sb);
}
}
나는 위와 같이 구현했고, 메서드만 알면 간단히 구현이 가능하므로, 설명은 생략하겠다.
혹시 Deque에 대해 잘 모른다면 Java API를 찾아볼 것을 추천한다.
'알고리즘 분류 > 큐 알고리즘' 카테고리의 다른 글
5430 AC JAVA (0) | 2023.04.05 |
---|---|
1021 회전하는 큐 JAVA (0) | 2023.04.03 |
18258 큐2 JAVA (0) | 2023.03.30 |
1966 프린터 큐 JAVA (0) | 2023.03.30 |
1158 요세푸스 순열 JAVA (0) | 2023.03.30 |