728x90

문제

Queue 자료구조를 직접 구현하는 문제로

push, pop, size, empty, front, back 메서드를 구현하면 된다.

 

참고로 18258번 큐2 문제와 같은 문제다.

 

접근 방식

스택처럼 push 할 때는 항상 맨 뒤에 넣는 것은 같지만

pop할 때는 가장 먼저 넣은 값을 꺼내줘야 한다.

front와 back 메서드는 스택의 peek 메서드라고 볼 수 있다.

 

입력의 사이즈가 주어졌기 때문에

연결 리스트 보다는 배열을 이용해서 구현 하면 될거 같고

배열의 현재 front와 back 인덱스를 저장할 변수가 추가적으로 필요하다.

 

front 인덱스는 pop을 할 때만 올라가야 하고

back 인덱스는 항상 배열의 끝에 값을 넣어줘야 하니

push 할 때마다 1씩 증가해야 한다.

 

풀이

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		int n = Integer.parseInt(br.readLine());

		Queue<Integer> queue = new Queue<>(n);

		for (int i = 0; i < n; i++) {
			String[] command = br.readLine().split(" ");

			switch (command[0]) {
				case "push": {
					queue.push(Integer.parseInt(command[1]));
					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.front()).append("\n");
					break;
				}
				case "back": {
					sb.append(queue.back()).append("\n");
					break;
				}
			}
		}

		System.out.println(sb);
	}

	static class Queue<T> {
		private T[] q;
		private int front = 0;
		private int back = 0;

		public Queue(int size) {
			this.q = (T[]) new Object[size];
		}

		public void push(T x) {
			q[back++] = x;
		}

		public Object pop() {
			return empty() == 0 ? q[front++] : -1;
		}

		public int size() {
			return back - front;
		}

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

		public Object front() {
			return empty() == 0 ? q[front] : -1;
		}

		public Object back() {
			return empty() == 0 ? q[back - 1] : -1;
		}
	}
}

 

'Java > Algorithms' 카테고리의 다른 글

[백준] 10866번 : 덱  (2) 2023.10.03
[백준] 2164번 : 카드2  (0) 2023.10.03
[백준] 2493번 : 탑  (0) 2023.10.03
[백준] 1874번 : 스택 수열  (0) 2023.10.02
[백준] 10773번 : 제로  (0) 2023.10.01

+ Recent posts