Programing/BaekJoon
[JAVA] 백준 10828 : 스택
블스뜸
2025. 3. 31. 16:41
큐를 학습하고 나서 한거라 그런지 스택은 손쉽게 구현했다
import java.io.*;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int count = Integer.parseInt(br.readLine());
NodeManager nodeManager = new NodeManager();
for (int i = 0; i < count; i++) {
st = new StringTokenizer(br.readLine());
Object result;
switch (st.nextToken()) {
case "push":
nodeManager.push(new StackNode(Integer.parseInt(st.nextToken())));
break;
case "pop":
result = nodeManager.pop();
bw.write(String.valueOf(result));
bw.newLine();
break;
case "size":
result = nodeManager.getSize();
bw.write(String.valueOf(result));
bw.newLine();
break;
case "empty":
result = nodeManager.isEmpty() ? 1 : 0;
bw.write(String.valueOf(result));
bw.newLine();
break;
case "top":
result = nodeManager.getTop() == null ? -1 : nodeManager.getTop().getValue();
bw.write(String.valueOf(result));
bw.newLine();
break;
default:
result = null;
break;
}
}
bw.flush();
bw.close();
br.close();
}
}
class StackNode {
private final int value;
private StackNode prevNode;
public StackNode(int value) {
this.value = value;
prevNode = null;
}
public int getValue() {
return value;
}
public StackNode getPrevNode() {
return prevNode;
}
public void setPrevNode(StackNode prevNode) {
this.prevNode = prevNode;
}
}
class NodeManager {
private StackNode top;
private int size;
public NodeManager() {
top = null;
size = 0;
}
public StackNode getTop() {
return top;
}
public boolean isEmpty() {
return top == null;
}
public int getSize() {
return size;
}
public void push(StackNode node) {
if (isEmpty()) top = node;
else {
node.setPrevNode(top);
top = node;
}
size++;
}
public int pop() {
if (isEmpty()) return -1;
StackNode node = top;
top = top.getPrevNode() == null ? null : top.getPrevNode();
size--;
return node.getValue();
}
public int peek() {
return isEmpty() ? -1 : top.getValue();
}
}