[알고리즘] 큐

2024. 2. 6. 17:22알고리즘 풀이/Java

https://www.acmicpc.net/problem/10845

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

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