Baekjoon 문제 풀기 (10845번 : 큐) Java
10845번 : 큐
1. 문제읽기
큐 구현 문제
2. 제출 코드
그냥 LinkedList로 구현하면 쉽고 빠르겠지만 그래도 직접 구현하는 문제이기 때문에 배열로 구현해보았다.
물론 잘 모르겠어서 검색해서 풀었다..^^
LinkedList로 그냥 구현할 때는 메소드만 가져다가 썼는데 배열로 직접 구현해보니 이해가 더 잘되는 느낌이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ10845 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
Queue queue = new Queue(n);
StringBuilder sb = new StringBuilder();
while(n --> 0) {
String[] cmds = bf.readLine().split(" ");
if(cmds.length == 2) {
queue.push(Integer.parseInt(cmds[1]));
}
switch(cmds[0]) {
case "front":
sb.append(queue.front()).append("\n");
break;
case "back":
sb.append(queue.back()).append("\n");
break;
case "size":
sb.append(queue.size()).append("\n");
break;
case "pop":
sb.append(queue.pop()).append("\n");
break;
case "empty":
if(queue.isEmpty()){
sb.append(1).append("\n");
break;
}
sb.append(0).append("\n");
break;
}
}
System.out.println(sb);
}
}
class Queue {
private int[] queue;
private int frontIndex = 0;
private int backIndex = 0;
Queue() {}
Queue(int num) {
queue = new int[num];
}
public void push(int num) {
queue[backIndex++] = num;
}
public int size() {
return backIndex - frontIndex;
}
public boolean isEmpty() {
if(size()==0) {
return true;
} else {
return false;
}
}
public int pop() {
if(isEmpty()) {
return -1;
}
return queue[frontIndex++];
}
public int front() {
if(isEmpty()) {
return -1;
}
return queue[frontIndex];
}
public int back() {
if(isEmpty()){
return -1;
}
return queue[backIndex-1];
}
}
3. 공부할 것
push와 pop의 로직을 잘 기억해두어야겠다.
테스트 케이스 중 back 부분이 다르게 출력되어서 확인해보니, return queue[backIndex]
로 코드를 적었다.
queue에 push될 때 backIndex가 하나 늘어나기 때문에 backIndex는 무조건 아무것도 저장되어있지 않은 인덱스를 가리키게된다. 따라서 -1을 해줘서 가장 뒤쪽에 있는 값을 출력해주어야 한다.
return queue[backIndex-1]
을 해줘서 통과했다.
댓글남기기