[백준]/java

[백준] 큐2(18258) - java

0_TLS 2023. 2. 10. 17:05

[문제]

정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여섯 가지이다.

  • push X: 정수 X를 큐에 넣는 연산이다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 큐에 들어있는 정수의 개수를 출력한다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
  • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

[입력]

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

 

[출력]

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

 

[예제 입력]

15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

[예제 출력]

1
2
2
0
1
2
-1
0
1
-1
0
3

[소스코드]

import java.util.*;
import java.util.Deque;
import java.util.ArrayDeque;

public class Main {

	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		String str = s.nextLine();
		String S;
		int num;
		String order = null;
		Deque<Integer> arr = new ArrayDeque<Integer>();
		int n = s.nextInt();
		for(int i=0; i<n; i++) {
			S = s.next();
			order = S.split(" ")[0];
			num = Integer.parseInt(S.split(" ")[1]);
			if(order.equals("push")) {
				arr.add(num);
			}
			else if(order.equals("pop")) {
				if(arr.size() == 0) {
					System.out.print(-1+"\n");
				}
				else {
					System.out.print(arr.removeFirst()+"\n");
				}
			}
			else if(order.equals("size")) {
				System.out.print(arr.size()+"\n");
			}
			else if(order.equals("empty")) {
				if(arr.size()==0) {
					System.out.print(1+"\n");
				}
				else {
					System.out.print(0+"\n");
				}
			}
			else if(order.equals("front")) {
				if(arr.size()==0) {
					System.out.print(-1+"\n");
				}
				else {
					System.out.print(arr.getFirst()+"\n");
				}
			}
			else if(order.equals("back")) {
				if(arr.size()==0) {
					System.out.print(-1+"\n");
				}
				else {
					System.out.print(arr.getLast()+"\n");
				}
			}
		}
	}
}

//런타임에러(InputMismatch)

 

 

[소스코드] - 수정

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
 
public class Main {
 
	static int[] q = new int[2000000];	
	
	static int size = 0;	
	static int front = 0;
	static int back = 0;
	
	static StringBuilder sb = new StringBuilder();
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		StringTokenizer st;
		int N = Integer.parseInt(br.readLine());
		
 
		while(N-- > 0) {
			st = new StringTokenizer(br.readLine(), " ");
			
			switch(st.nextToken()){
			case "push": push(Integer.parseInt(st.nextToken())); break;
			case "pop" : pop(); break;
			case "size" : size(); break;
			case "empty" : empty(); break;
			case "front" : front(); break;
			case "back" : back(); break;
			
			}
		}
		System.out.println(sb);
	}
	
	static void push(int n) {
		q[back] = n;
		back++;
		size++;
	}
	
	static void pop() {
		if(size == 0) {
			sb.append(-1).append('\n');
		}
		else {
			sb.append(q[front]).append('\n');	
			size--;
			front++;	
		}
	}
	
	static void size() {
		sb.append(size).append('\n');
	}
	
	static void empty() {
		if(size == 0) {
			sb.append(1).append('\n');
		}
		else sb.append(0).append('\n');
	}
	
	static void front() {
		if(size == 0) { 
			sb.append(-1).append('\n');
		}
		else {
			sb.append(q[front]).append('\n');	  
		}
	}
	
	static void back() {
		if(size == 0) {
			sb.append(-1).append('\n');
		}
		else {
			sb.append(q[back - 1]).append('\n');	
		}
	}
 
}