백준 10845 문제는 Queue 자료구조를 을 직접 구현하고 입력으로 주어지는 명령을 처리하는 코드를 작성하면 된다. 다만 입력 값을 받기 위해서 BufferedReader를 사용하여 입력을 효율적으로 처리하고, Queue와 Node 클래스를 사용하여 Queue 자료구조를 구현했다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		Queue queue = new Queue();
		for (int i = 0; i < n; i++) {
			String[] command = br.readLine().split(" ");
			if (command[0].equals("push")) {
				queue.push(Integer.parseInt(command[1]));
			}
			if (command[0].equals("front")) {
				System.out.println(queue.front());
			}
			if (command[0].equals("back")) {
				System.out.println(queue.back());
			}
			if (command[0].equals("size")) {
				System.out.println(queue.size());
			}
			if (command[0].equals("pop")) {
				System.out.println(queue.pop());
			}
			if (command[0].equals("empty")) {
				System.out.println(queue.isEmpty());
			}
		}
	}
}

class Queue {
	private int size;
	private Node current;
	private Node first;

	public void push(int x) {
		if (isEmpty() == 1) {
			first = new Node(null, null, x);
			current = first;
		} else {
			Node node = new Node(current, null, x);
			current.setNext(node);
			current = node;
		}
		size++;
	}

	public int pop() {
		if (first == null) return -1;
		int value = first.getValue();
		first = first.getNext();
		if (first == null) current = null;
		size--;
		return value;
	}

	public int size() {
		return size;
	}

	public int isEmpty() {
		return size == 0 ? 1 : 0;
	}

	public int front() {
		return first == null ? -1 : first.getValue();
	}

	public int back() {
		return current == null ? -1 : current.getValue();
	}
}

class Node {
	private Node prev;
	private Node next;
	private int value;

	public Node(Node prev, Node next, int value) {
		this.prev = prev;
		this.next = next;
		this.value = value;
	}

	public Node getNext() {
		return this.next;
	}

	public void setNext(Node next) {
		this.next = next;
	}

	public int getValue() {
		return value;
	}
}