바로 전 문제 스택과 거의 같은 문제이다.
스택에서는 그냥 스택을 사용하여 풀었는데 이번에는 직접 큐 처럼 동작하는 배열을 만들어서 구현했다.
큐는 선입선출이므로 먼저 들어온 값을 삭제한다. 여기서는 직접 삭제하지 않고 보여줄 부분을 변경
우선 배열의 보여줄 부분 시작점 start , 끝점 last 으로 두고
- push 시 배열의 last 인덱스에 추가후 last를 ++
- pop 에는 직접 삭제를 하지말고 큐의 last인덱스를 보여주고 보여줄 start를 ++한다.
- size 해당 큐의 크기는 last- start 이다 (배열을 직접 삭제하지않고 보여주는 부분만 바꿨기때문)
- empty start back 은 사이즈에 따라, 즉 last-start 이 0인지 아닌지에 출력을 바꿔준다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
//큐
//https://www.acmicpc.net/problem/10845
public class B10845 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(bf.readLine());
int[] queue = new int[10001];
int start = 0;
int last = 0;
for(int i=0; i<N; i++){
st = new StringTokenizer(bf.readLine(), " ");
switch (st.nextToken()){
case "push":{
queue[last] = Integer.parseInt(st.nextToken());
last++;
break;
}
case "pop":{
if(last-start==0) sb.append(-1).append('\n');
else {
sb.append(queue[start]).append('\n');
start++;
}
break;
}
case "size":{
sb.append(last-start).append('\n');
break;
}
case "empty":{
if(last-start == 0) sb.append(1).append('\n');
else sb.append(0).append('\n');
break;
}
case "front":{
if(last-start == 0) sb.append(-1).append('\n');
else sb.append(queue[start]).append('\n');
break;
}
case "back":{
if(last-start == 0) sb.append(-1).append('\n');
else sb.append(queue[last-1]).append('\n');
break;
}
}
}
System.out.println(sb);
}
}
'연습문제 > JAVA' 카테고리의 다른 글
[백준 java] 7662 - 이중 우선순위 큐 (0) | 2022.08.29 |
---|---|
[백준 java] 1068 - 트리 (0) | 2022.08.27 |
[백준 java] 10828 - 스택 (0) | 2022.08.26 |
[백준 java] 9935 - 문자열 폭발 (0) | 2022.08.25 |
[백준 java] 1717 - 집합의 표현 (Union-find) (0) | 2022.08.25 |