728x90
문제
Queue 자료구조를 직접 구현하는 문제로
push, pop, size, empty, front, back 메서드를 구현하면 된다.
참고로 18258번 큐2 문제와 같은 문제다.
접근 방식
스택처럼 push 할 때는 항상 맨 뒤에 넣는 것은 같지만
pop할 때는 가장 먼저 넣은 값을 꺼내줘야 한다.
front와 back 메서드는 스택의 peek 메서드라고 볼 수 있다.
입력의 사이즈가 주어졌기 때문에
연결 리스트 보다는 배열을 이용해서 구현 하면 될거 같고
배열의 현재 front와 back 인덱스를 저장할 변수가 추가적으로 필요하다.
front 인덱스는 pop을 할 때만 올라가야 하고
back 인덱스는 항상 배열의 끝에 값을 넣어줘야 하니
push 할 때마다 1씩 증가해야 한다.
풀이
public class Main {
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());
Queue<Integer> queue = new Queue<>(n);
for (int i = 0; i < n; i++) {
String[] command = br.readLine().split(" ");
switch (command[0]) {
case "push": {
queue.push(Integer.parseInt(command[1]));
break;
}
case "pop": {
sb.append(queue.pop()).append("\n");
break;
}
case "size": {
sb.append(queue.size()).append("\n");
break;
}
case "empty": {
sb.append(queue.empty()).append("\n");
break;
}
case "front": {
sb.append(queue.front()).append("\n");
break;
}
case "back": {
sb.append(queue.back()).append("\n");
break;
}
}
}
System.out.println(sb);
}
static class Queue<T> {
private T[] q;
private int front = 0;
private int back = 0;
public Queue(int size) {
this.q = (T[]) new Object[size];
}
public void push(T x) {
q[back++] = x;
}
public Object pop() {
return empty() == 0 ? q[front++] : -1;
}
public int size() {
return back - front;
}
public int empty() {
return size() == 0 ? 1 : 0;
}
public Object front() {
return empty() == 0 ? q[front] : -1;
}
public Object back() {
return empty() == 0 ? q[back - 1] : -1;
}
}
}
'Java > Algorithms' 카테고리의 다른 글
[백준] 10866번 : 덱 (2) | 2023.10.03 |
---|---|
[백준] 2164번 : 카드2 (0) | 2023.10.03 |
[백준] 2493번 : 탑 (0) | 2023.10.03 |
[백준] 1874번 : 스택 수열 (0) | 2023.10.02 |
[백준] 10773번 : 제로 (0) | 2023.10.01 |