[백준] 큐 2

진예·2023년 10월 31일
0

Baekjoon : JAVA

목록 보기
54/76
post-thumbnail
post-custom-banner

📌 문제

[18258] 큐 2

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

명령은 총 여섯 가지이다.

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

⬇️ 입력

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

⬆️ 출력

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

💡 코드

q를 생성하고, switch ~ case문을 사용하여 명령어 order에 따라 각 명령문을 처리하는 코드를 작성했다. 하나를 제외한 모든 명령문에서 출력을 수행하므로 결과result에 저장하여 switch ~ case문이 종료되면 출력을 수행하게 하였다.

  • push : 유일하게 입력값이 2개인 명령이므로 Stringtokenizer를 통에 q에 넣을 num을 받고, offer(num) 메서드를 사용하여 numq에 넣는다. 해당 명령어는 출력을 따로 요구하지 않는다.

  • pop : isEmpty() 메서드를 사용하여 q가 비어있다면 -1, 비어있지 않다면 poll() 메서드를 사용하여 q의 출구 요소(가장 먼저 저장한 요소)를 꺼내고 result에 저장한다.

  • size : size() 메서드를 사용하여 q에 저장된 정수의 개수result에 저장한다.

  • empty : isEmpty() 메서드를 사용하여 q가 비어있다면 1, 비어있지 않다면 0result에 저장한다.

  • front : q비어있다면 -1, 비어있지 않다면 peek() 메서드를 사용하여 출구 요소result에 저장한다. 이 때, peek()poll()과 달리 요소를 삭제하지 않고 단순 출력만 수행한다.

  • back : q비어있다면 -1, 비어있지 않다면 마지막에 저장한 값result에 저장한다. 이 때, 마지막에 저장한 값을 불러오는 메서드가 따로 없으므로 push 단계에서 값을 넣을 때 사용한 num을 사용하면 된다.


    switch ~ case문이 종료되면 result 값을 출력한다. 이 때, push를 수행하여 result의 값이 초기값인 -2인 경우에는 출력을 수행하지 않는다.
import java.io.*;
import java.util.*;
public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		
		Queue<Integer> q = new LinkedList<>();
		
		int n = Integer.parseInt(br.readLine());
		int num = 0;
		for(int i=0;i<n;i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String order = st.nextToken();
			
			int result = -2;
			switch(order) {
				case "push" : 
					num = Integer.parseInt(st.nextToken());
					q.offer(num);
					break;
				
				case "pop" :
					if(q.isEmpty()) result = -1;
					else result = q.poll();
					break;
				
				case "size" : 
					result = q.size(); break;
				
				case "empty" : 
					if(q.isEmpty()) result = 1;
					else result = 0;
					break;
				
				case "front" :
					if(q.isEmpty()) result = -1;
					else result = q.peek();
					break;
				
				case "back" : 
					if(q.isEmpty()) result = -1;
					else result = num;
			}
			if(result != -2) sb.append(result).append("\n");
		}
		bw.write(sb + "");

		br.close();
		bw.close();
	}
}

profile
백엔드 개발자👩🏻‍💻가 되고 싶다
post-custom-banner

0개의 댓글