백준 10845
2018-10-11
백준 10845 - 큐
package ex;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 한번 지나간건 돌아오지 않음.
// push 시 커서값으로 변수하나 줘야함
//
/*
*
push X: 정수 X를 큐에 넣는 연산이다.
pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 큐에 들어있는 정수의 개수를 출력한다.
empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
*/
public class BaeJoon10845 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
scanner.nextLine();
// 큐 생성
QueueAl queue = new QueueAl(num);
int i = 0;
String target;
while (i < num) {
target = scanner.nextLine();
if (target.contains(" ")) {
// push
String[] splited = target.split(" ");
queue.push(Integer.parseInt(splited[1]));
} else if (target.equals("front")) {
System.out.println(queue.front());
} else if (target.equals("size")) {
System.out.println(queue.size());
} else if (target.equals("back")) {
System.out.println(queue.back());
} else if (target.equals("pop")) {
System.out.println(queue.pop());
} else if (target.equals("empty")) {
System.out.println(queue.empty());
} else if (target.equals("check")) {
queue.check();
}
i++;
}
}
}
class QueueAl {
Integer[] list;
int lastOne;
int cursor = 0;
public QueueAl(int inital) {
list = new Integer[inital];
lastOne = inital;
}
public void check() {
for (Integer integer : list) {
System.out.print(integer + " , ");
}
}
public void push(int target) {
list[cursor] = target;
cursor++;
}
public int pop() {
Integer extracted = -1;
for (int i = 0; i < lastOne; i++) {
if (list[i] != null) {
extracted = list[i];
list[i] = null;
// cursor--;
break;
}
}
return extracted;
}
public int front() {
Integer extracted = -1;
for (int i = 0; i < lastOne; i++) {
if (list[i] != null) {
extracted = list[i];
break;
}
}
return extracted;
}
public int size() {
int j = 0;
for (Integer integer : list) {
if (integer != null)
j++;
}
return j;
}
public int back() {
Integer extracted = -1;
for (int i = lastOne - 1; i >= 0; i--) {
if (list[i] != null) {
extracted = list[i];
// cursor--;
break;
}
}
return extracted;
}
public int empty() {
int target = 1;
for (Integer integer : list) {
if (integer != null) {
target = 0;
break;
}
}
return target;
}
}
이번 문제는 비교적 쉬운 문제였다.
어렵게 생각해서 좀 오래걸렸다.
null 값이랑 push 해준 값 찾기 위한 for 문만 잘써주고
push된 값이 어디까지 들어갔는지 확인을 위한 cursor 변수하나를 선언해준다.
그리고 push 할때마다 cursor++;를 해줌으로써 커서가 어딘지 계속확인해주면 된다.
Queue의 check 함수는 Integer 전체 배열을 확인하기 위한 디버그 용도이다.