Queue(큐)는 선입선출 방식으로 구성되는 자료구조이다. (First In First Out, FIFO)
원소의 삽입(push)은 무조건 큐의 뒷(꼬리)로만 이루어지고
원소의 삭제(pop)는 무조건 큐의 앞(머리)에서만 이루어진다.
ArrayList를 사용하여 구현했다.
import java.io.*;
import java.util.ArrayList;
import java.util.Stack;
public class Main {
public static void main(String [] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
MyQueue queue = new MyQueue();
int cnt = Integer.parseInt(br.readLine());
for (int i=0;i<cnt;i++) {
String command = br.readLine();
switch (command) {
case "pop" :
System.out.println(queue.pop());
break;
case "size" :
System.out.println(queue.getSize());
break;
case "empty" :
System.out.println(queue.isEmpty());
break;
case "front" :
System.out.println(queue.getFront());
break;
case "back" :
System.out.println(queue.getBack());
break;
default :
int num = Integer.parseInt(command.substring(5));
queue.push(num);
break;
}
}
br.close();
}
}
class MyQueue {
ArrayList<Integer> queue = new ArrayList<>();
int size = 0;
int front = -1;
int back = -1;
public void push(int item) {
if (queue.isEmpty()) {
front = item;
}
queue.add(item);
size++;
back = item;
}
public int pop() {
if (queue.isEmpty()) {
return -1;
}
int temp = queue.remove(0);
if (queue.isEmpty()) {
front = -1;
back = -1;
} else {
front = queue.get(0);
}
size--;
return temp;
}
public int isEmpty() {
if (queue.isEmpty()) {
return 1;
}
return 0;
}
public int getSize() {
return size;
}
public int getFront() {
return front;
}
public int getBack() {
return back;
}
}
MyQueue는 front, back, size 변수를 가지며, 각 변수는 차례로 큐의 첫 원소(머리), 큐의 마지막 원소(꼬리), 그리고 큐에 들어있는 원소들의 개수를 나타낸다.
push(int item) 메소드는 큐의 꼬리(마지막 원소의 뒤)에 item을 삽입하고
pop() 메소드는 큐의 머리(가장 앞)의 원소를 반환하고 큐에서 해당 원소를 삭제한다.
'알고리즘 > 백준 알고리즘(JAVA)' 카테고리의 다른 글
JAVA)10866번 Deque(덱) 구현하기 (DoublyLinkedList (이중연결리스트) 사용) (0) | 2020.07.15 |
---|---|
JAVA)1158번 Queue(큐)로 요세푸스 순열 구하기 (0) | 2020.07.14 |
JAVA)1406번 stack을 사용하여 editor 만들기, 문자열의 + 연산과 StringBuilder와의 시간 소모 차이 (0) | 2020.07.14 |
JAVA)1876번 스택을 사용한 수열만들기 (0) | 2020.07.14 |
JAVA)9012번 스택으로 괄호 판정(VPS 판정) (0) | 2020.07.14 |
알고리즘/백준 알고리즘(JAVA) 카테고리의 다른 글
JAVA)10866번 Deque(덱) 구현하기 (DoublyLinkedList (이중연결리스트) 사용)
JAVA)1158번 Queue(큐)로 요세푸스 순열 구하기
JAVA)1406번 stack을 사용하여 editor 만들기, 문자열의 + 연산과 StringBuilder와의 시간 소모 차이
JAVA)1876번 스택을 사용한 수열만들기