https://www.acmicpc.net/problem/18258
18258번: 큐 2
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
수업시간에 큐를 배웠기 때문에 구현에 큰 어려움이 없었....어야 했는데 계속 예제와 다른 결과가 나왔다.
분명 1, 2를 입력하고 front, back, size 하면 1,2,2가 나와야 하는데 10 2 0이 나오는 현상이 발생했다.
디버깅 과정에서 back 출력에 인덱스로 back-1을 해줘야 하는 걸 찾았지만 사실 그래도 10 2가 나올 원인은 아니었다.
back을 고치니 12 2가 나왔는데.... 또 한참을 코드를 쳐다봄....
10이 12로 바뀐 걸 보고 눈치 챘어야 했는데 front 출력에 개행을 빼먹었던 것....
10분이면 풀 문제를 대략 30분은 잡고 있었다.
어제는 연속 20일 넘게 꾸준히 심던 github 잔디를 push 명령어 치는 걸 깜빡해서 끊어버렸는데
정신 좀 바짝 차려야겠다는 생각이 든다.
import java.io.*;
public class B_18258 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int[] queue = new int[N];
int front = 0;
int back = 0;
int size = 0;
for (int i=0;i<N;i++){
String[] data = br.readLine().split(" ");
if(data[0].equals("push")){
queue[back++] = Integer.parseInt(data[1]);
size++;
if(back>=N) {
back = 0;
}
}
else if(data[0].equals("pop")){
if(size==0) {
bw.write("-1");
bw.newLine();
}
else {
bw.write(Integer.toString(queue[front++]));
bw.newLine();
size--;
if(front>=N) {
front = 0;
}
}
}
else if(data[0].equals("size")){
bw.write(Integer.toString(size));
bw.newLine();
}
else if(data[0].equals("empty")){
if (size==0) {
bw.write("1");
bw.newLine();
}
else {
bw.write("0");
bw.newLine();
}
}
else if(data[0].equals("front")){
if (size==0) {
bw.write("-1");
bw.newLine();
}
else {
bw.write(Integer.toString(queue[front]));
bw.newLine();
}
}
else if(data[0].equals("back")){
if (size==0) {
bw.write("-1");
bw.newLine();
}
else {
bw.write(Integer.toString(queue[back-1]));
bw.newLine();
}
}
}
bw.flush();
bw.close();
}
}

'알고리즘 > BOJ (JAVA)' 카테고리의 다른 글
| (JAVA) 백준 1769번 : 3의 배수 (0) | 2022.01.28 |
|---|---|
| (JAVA) 백준 17478번 : 재귀함수가 뭔가요? (0) | 2022.01.27 |
| (JAVA) 백준 10773번 : 제로 (0) | 2022.01.24 |
| (JAVA) 백준 10828번 : 스택 (0) | 2022.01.23 |
| (JAVA) 백준 1427번 : 소트인사이드 (0) | 2022.01.23 |