자료구조 中 큐에 대해서 공부해보았다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Queue<Integer> que = new LinkedList<>();
int last = 0;
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String str = st.nextToken();
switch (str){
case "push":
last = Integer.parseInt(st.nextToken());
que.add(last);
break;
case "pop":
if (que.isEmpty()){
sb.append(-1).append('\n');
}
else sb.append(que.poll()).append('\n');
break;
case "size":
sb.append(que.size()).append('\n');
break;
case "empty":
if (que.isEmpty()) sb.append(1).append('\n');
else sb.append(0).append('\n');
break;
case "front":
if (que.isEmpty()){
sb.append(-1).append('\n');
}
else sb.append(que.peek()).append('\n');
break;
case "back":
if (que.isEmpty()){
sb.append(-1).append('\n');
}
else sb.append(last).append('\n');
break;
}
}
System.out.println(sb);
}
}
직접 Queue 를 구현해보기도 했음 스택을 공부하고 나니까 훨씬 이해가 쉬워지는 느낌
first 값 last 값 만 기억하면 쉬웠던거 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static int[] queue = new int[10001];
public static int first = 0;
public static int last = 0;
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());
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String str = st.nextToken();
switch (str) {
case "push":
push(Integer.parseInt(st.nextToken()));
break;
case "pop":
sb.append(pop()).append('\n');
break;
case "size":
sb.append(size()).append('\n');
break;
case "empty":
sb.append(empty()).append('\n');
break;
case "front":
sb.append(front()).append('\n');
break;
case "back":
sb.append(back()).append('\n');
break;
}
}
System.out.println(sb);
}
public static void push(int item) {
queue[last] = item;
last++;
}
public static int pop() {
if (last - first == 0) {
return -1;
} else {
int value = queue[first];
first++;
return value;
}
}
public static int size() {
return last - first;
}
public static int empty() {
if (last - first == 0) {
return 1;
} else return 0;
}
public static int front() {
if (last - first == 0) {
return -1;
} else {
int F = queue[first];
return F;
}
}
public static int back() {
if (last - first == 0) {
return -1;
} else {
int B = queue[last - 1];
return B;
}
}
}