본문 바로가기
프로그래밍 문제/BOJ(백준 온라인 저지)

[BOJ 18258번] 큐 2(JAVA)

by 테크케찰 2020. 7. 31.

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

 

18258번: 큐 2

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

www.acmicpc.net

import java.util.*;
import java.io.*;

public class Main {
	static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
	static StringBuilder sb=new StringBuilder();
	static int front=-1;
	static int rear=-1;
	static int[] queue;
	
	public static void main(String args[]) throws Exception {
		int num=Integer.parseInt(br.readLine());
		if(num<1||num>2000000) return;
		queue=new int[num];
		for(int i=0;i<num;i++) {
			String str=br.readLine();
			switch(str) {
			case "pop":
				sb.append(pop()+"\n");
				break;
			case "size":
				sb.append(size()+"\n");
				break;
			case "empty":
				sb.append(empty()+"\n");
				break;
			case "front":
				sb.append(front()+"\n");
				break;
			case "back":
				sb.append(back()+"\n");
				break;
			default:
				if(str.startsWith("push")) {
					String str2[]=str.split(" ");
					int temp=Integer.parseInt(str2[1]);
					if(temp<1||temp>100000) return;
					push(temp);
				}
			}
		}
		System.out.println(sb);
	}
	
	public static void push(int num) {
		queue[++rear]=num;
	}
	
	public static int pop() {
		if(rear>front) return queue[++front];
		else return -1;
	}
	
	public static int size() {
		return rear-front;
	}
	
	public static int empty() {
		if(size()<=0) return 1;
		else return 0;
	}
	
	public static int front(){
		if(size()<=0) return -1;
		else return queue[front+1];
	}
	
	public static int back() {
		if(size()<=0) return -1;	
		else return queue[rear];
	}
}

 오늘은 큐에 대한 문제를 풀어보았습니다.

큐에 대해서 간단히 말씀드리자면, 큐는 스택처럼 데이터를 저장하는 데에 쓰이는 개념입니다.

스택이 후입선출(LIFO: Last In First Out)이었다면, 큐는 선입선출(FIFO: First In First Out)으로 가장 먼저 저장된 데이터가 가장 먼저 나오는 저장방식을 가지고 있습니다.

 

저는 배열을 이용하여 큐를 구현하였는데요, 큐의 첫 번째 인덱스에서 -1을 한 front라는 변수와, 큐의 마지막 인덱스와 같은 값을 가지는 rear라는 변수를 선언하여 큐를 관리했습니다.

그래서 push가 진행되면 rear를 하나 증가시켜주면서 데이터를 저장하고, pop을 할 때는 front 값을 하나 증가시켜주면서 데이터를 저장하는 방식으로 코드를 구현했습니다.