[알고리즘] 큐
2024. 2. 6. 17:22ㆍ알고리즘 풀이/Java
https://www.acmicpc.net/problem/10845
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static StringBuilder sb = new StringBuilder();
public static class Node {
int number;
Node nextNode;
public Node(int number, Node nextNode) {
super();
this.number = number;
this.nextNode = nextNode;
}
public Node(int number) {
this(number, null);
}
}
public static class LinkedList {
Node head;
Node tail;
int size;
public LinkedList() {
head = getNewNode(-1);
tail = head;
size = 0;
}
private Node getNewNode(int number) {
return new Node(number);
}
public void addLast(int number) {
Node newNode = getNewNode(number);
if (head.nextNode == null) {
head.nextNode = newNode;
tail = newNode;
size++;
return;
}
tail.nextNode = newNode;
tail = newNode;
size++;
}
public int popFirst() {
if (head.nextNode == null) {
throw new NullPointerException();
}
Node removeNode = head.nextNode;
head.nextNode = removeNode.nextNode;
if (head.nextNode == null) {
tail = head;
}
size--;
return removeNode.number;
}
}
public static class Queue {
LinkedList linkedList = new LinkedList();
public boolean isEmpty() {
return linkedList.size == 0;
}
public int empty() {
if (isEmpty()) {
return 1;
}
return 0;
}
public void push(int X) {
linkedList.addLast(X);
}
public int pop() {
if (isEmpty()) {
return -1;
}
return linkedList.popFirst();
}
public int size() {
return linkedList.size;
}
public int peekFront() {
if (isEmpty()) {
return -1;
}
return linkedList.head.nextNode.number;
}
public int peekBack() {
if (isEmpty()) {
return -1;
}
return linkedList.tail.number;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
Queue queue = new Queue();
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
switch (st.nextToken()) {
case "push":
queue.push(Integer.parseInt(st.nextToken()));
break;
case "pop":
sb.append(queue.pop()).append("\n");
break;
case "size":
sb.append(queue.size()).append("\n");
break;
case "empty":
sb.append(queue.empty()).append("\n");
break;
case "front":
sb.append(queue.peekFront()).append("\n");
break;
case "back":
sb.append(queue.peekBack()).append("\n");
break;
}
}
System.out.println(sb);
}
}
나의 풀이
- queue를 구현해서 풀었다.
- LinkedList도 구현하였다. 그 대신 queue에 필요한 함수만 만들었다. 뒤에서 보는 것도 필요하기에 tail도 만들었다.
'알고리즘 풀이 > Java' 카테고리의 다른 글
[알고리즘] 절댓값 힙 (0) | 2024.02.07 |
---|---|
[알고리즘][X] 색종이 (1) | 2024.02.06 |
[알고리즘] 배열 돌리기 1 (1) | 2024.02.06 |
[알고리즘] 트리 정리 (0) | 2024.02.06 |
[알고리즘][X] AC (1) | 2024.02.06 |