https://www.acmicpc.net/problem/10845
문제 상황
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
문제 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
Queue queue = new Queue(num);
for(int i = 0; i < num; i++){
String[] str = br.readLine().split(" ");
switch (str[0]){
case "push" :
queue.push(Integer.parseInt(str[1]));
break;
case "pop":
System.out.println(queue.pop());
break;
case "size":
System.out.println(queue.size());
break;
case "empty":
System.out.println(queue.empty());
break;
case "front":
System.out.println(queue.front());
break;
case "back":
System.out.println(queue.back());
break;
}
}
br.close();
}
}
class Queue {
private int size;
private int[] arr;
private int front;
private int back;
public Queue(int size) {
this.size = size;
this.arr = new int[size];
this.front = 0;
this.back = 0;
}
public void push(int n) {
if(front >= back){
for(int i = front-1; i >= 0; i--){
arr[i+1] = arr[i];
}
}
arr[0] = n;
front++;
}
public int pop() {
if(front <= back){
return -1;
} else{
int ans = arr[front-1];
arr[front-1]=0;
front--;
return ans;
}
}
public int size() {
return front;
}
public int empty() {
if (front <= back) return 1;
else return 0;
}
public int front() {
if (front <= back) return -1;
else return arr[front-1];
}
public int back() {
if (front <= back) return -1;
else return arr[back];
}
}
'알고리즘 > 자료구조' 카테고리의 다른 글
[백준] 1927 최소 힙 - Java (0) | 2023.03.28 |
---|---|
[자료구조] 스택 (Stack) (0) | 2023.03.21 |
[백준] 10828 스택 - Java (0) | 2023.03.20 |
[프로그래머스] 같은 숫자는 싫어 (스택/큐) - Java (0) | 2023.03.19 |
[프로그래머스] 배열의 유사도 (0) | 2023.03.13 |