https://www.acmicpc.net/problem/18258
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 값을 하나 증가시켜주면서 데이터를 저장하는 방식으로 코드를 구현했습니다.
'프로그래밍 문제 > BOJ(백준 온라인 저지)' 카테고리의 다른 글
[BOJ 1966번] 프린터 큐(JAVA) (0) | 2020.08.02 |
---|---|
[BOJ 2164번] 카드2(자바) (0) | 2020.07.31 |
[BOJ 9012번] 괄호(JAVA) (0) | 2020.07.29 |
[BOJ 1874번] 스택 수열(Java) (0) | 2020.07.24 |
[BOJ 10773번] 제로(Java) (0) | 2020.07.23 |