
스택에 이어서 큐 자료구조 연습을 해보았다.
큐는 먼저 들어온 값이 먼저 나가는 FIFO(First In First Out) 선입선출 자료구조이다.
스택은 위로 쌓인다 라는 개념, 큐는 뒤로 줄 세운다 라는 개념.
Queue<Element> queue1 = new LinkedList<>();
Queue<Element> queue2 = new Queue<Element>() {
@Override
public boolean add(Element element) {
return false;
}
@Override
public boolean offer(Element element) {
return false;
}
@Override
public Element remove() {
return null;
}
@Override
public Element poll() {
return null;
}
@Override
public Element element() {
return null;
}
@Override
public Element peek() {
return null;
}
@Override
public int size() {
return 0;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean contains(Object o) {
return false;
}
@Override
public Iterator<Element> iterator() {
return null;
}
@Override
public Object[] toArray() {
return new Object[0];
}
@Override
public <T> T[] toArray(T[] a) {
return null;
}
@Override
public boolean remove(Object o) {
return false;
}
@Override
public boolean containsAll(Collection<?> c) {
return false;
}
@Override
public boolean addAll(Collection<? extends Element> c) {
return false;
}
@Override
public boolean removeAll(Collection<?> c) {
return false;
}
@Override
public boolean retainAll(Collection<?> c) {
return false;
}
@Override
public void clear() {
}
};
스택과 마찬가지로, 자바에서 큐 자료구조를 지원해 준다.
하지만 역시 직접 구현해 보았다.
우선 전체 코드이다.
package since_24_07;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_10845 {
static int[] queue = new int[10000];
static int front = 0;
static int rear = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int inputN = Integer.parseInt(br.readLine());
for (int i = 0; i <inputN; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String command = st.nextToken();
if (command.equals("push")){
push(Integer.parseInt(st.nextToken()));
continue;
}
if (command.equals("pop")){
sb.append(pop()).append('\n');
continue;
}
if (command.equals("size")){
sb.append(size()).append('\n');
continue;
}
if (command.equals("empty")){
sb.append(empty()).append('\n');
continue;
}
if (command.equals("front")){
sb.append(front()).append('\n');
continue;
}
if (command.equals("back")){
sb.append(back()).append('\n');
continue;
}
} // end for
System.out.println(sb);
}
public static void push(int input){
queue[rear] = input;
rear++;
}
public static int pop(){
if(empty() == 0) {
int num = queue[front];
front++;
return num;
}
else
return -1;
}
public static int size() {
if (front != rear) {
return rear - front;
} else
return 0;
}
public static int empty(){
if (front == rear)
return 1;
else
return 0;
}
public static int front(){
if(empty() == 0)
return queue[front];
else
return -1;
}
public static int back() {
if (front != rear) {
return queue[rear - 1];
} else
return -1;
}
}
// 백준 10845번 큐
// 정수를 저장하는 큐를 구현한 다음,
// 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
// 명령은 총 여섯 가지이다.
// push X: 정수 X를 큐에 넣는 연산이다.
// pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
// size: 큐에 들어있는 정수의 개수를 출력한다.
// empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
// front: 큐의 가장 앞에 있는 정수를 출력한다.
// 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
// back: 큐의 가장 뒤에 있는 정수를 출력한다.
// 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
// 입력
// 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다.
// 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다.
// 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.
// 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
// 출력
// 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
스택은 Case문을 이용해 풀었지만, 이번엔 if 문을 사용해 풀어보았다.
이번에 사용한 if문 보다 확실히 Case문이 눈에 확 들어온다.
반응형
'코딩테스트' 카테고리의 다른 글
| 프로그래머스 문자열 잘라서 정렬하기 (1) | 2024.08.31 |
|---|---|
| 백준 10828번 스택 (0) | 2024.06.30 |
| 백준 11720번 숫자의 합 (0) | 2024.06.19 |