알고리즘/백준 알고리즘(JAVA)
2020.07.15
댓글 개
starmk95
JAVA)10866번 Deque(덱) 구현하기 (DoublyLinkedList (이중연결리스트) 사용)
Deque(덱)은 양 끝에서만 데이터를 넣거나 뺄 수 있는 자료구조이다.
Double-ended queue의 약자이다.
덱에는 front와 back 요소가 있으며, 각 각 맨앞과 맨뒤를 의미한다.
front 또는 back에만 원소를 추가할 수 있고, front 또는 back에 위치한 원소만 빼낼 수 있다.
이러한 특성을 가진 덱을 구현하기 위해, DoublyLinkedList(이중연결리스트)를 사용하여 구현하였다.
import java.io.*;
import java.nio.Buffer;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
MyDeque deque = new MyDeque();
int N = Integer.parseInt(br.readLine());
for (int i=0;i<N;i++) {
String[] command = br.readLine().split(" ");
switch (command[0]) {
case "push_front" :
deque.push_front(Integer.parseInt(command[1]));
break;
case "push_back" :
deque.push_back(Integer.parseInt(command[1]));
break;
case "pop_front" :
System.out.println(deque.pop_front());
break;
case "pop_back" :
System.out.println(deque.pop_back());
break;
case "size" :
System.out.println(deque.getSize());
break;
case "empty" :
System.out.println(deque.isEmpty());
break;
case "front" :
System.out.println(deque.getFront());
break;
case "back" :
System.out.println(deque.getBack());
break;
}
}
}
}
class MyDeque { // Doubly Linked List로 구현
Node head, tail = null;
int size = 0;
private class Node {
public int value;
private Node next;
private Node prev;
public Node(int value) {
this.next = null;
this.prev = null;
this.value = value;
}
}
public void push_front(int item) {
Node node = new Node(item);
Node temp = head;
head = node;
head.next = temp;
if (temp != null) {
temp.prev = head;
}
size++;
if (size == 1) {
tail = head;
}
}
public void push_back(int item) {
Node node = new Node(item);
Node temp = tail;
tail = node;
tail.prev = temp;
if (temp != null) {
temp.next = tail;
}
size++;
if (size == 1) {
head = tail;
}
}
public int pop_front() {
if (head == null) {
return -1;
}
Node temp = head;
head = temp.next;
int val = temp.value;
if (head != null) {
head.prev = null;
} else {
tail = head;
}
size--;
return val;
}
public int pop_back() {
if (tail == null) {
return -1;
}
Node temp = tail;
tail = temp.prev;
int val = temp.value;
if (tail != null) {
tail.next = null;
} else {
head = tail;
}
size--;
return val;
}
public int getSize() {
return size;
}
public int isEmpty() {
if (size == 0) {
return 1;
}
return 0;
}
public int getFront() {
if (head == null) {
return -1;
}
return head.value;
}
public int getBack() {
if (tail == null) {
return -1;
}
return tail.value;
}
}
'알고리즘 > 백준 알고리즘(JAVA)' 카테고리의 다른 글
JAVA)10799번 쇠막대기 자르기 - 스택(Stack) 사용 (0) | 2020.07.16 |
---|---|
JAVA)17413번 단어뒤집기2 - 스택(Stack) 사용 (0) | 2020.07.16 |
JAVA)1158번 Queue(큐)로 요세푸스 순열 구하기 (0) | 2020.07.14 |
JAVA)10845번 Queue(큐) 구현하기 (0) | 2020.07.14 |
JAVA)1406번 stack을 사용하여 editor 만들기, 문자열의 + 연산과 StringBuilder와의 시간 소모 차이 (0) | 2020.07.14 |
알고리즘/백준 알고리즘(JAVA) 카테고리의 다른 글
JAVA)10799번 쇠막대기 자르기 - 스택(Stack) 사용
JAVA)17413번 단어뒤집기2 - 스택(Stack) 사용
JAVA)1158번 Queue(큐)로 요세푸스 순열 구하기
JAVA)10845번 Queue(큐) 구현하기