Programing/BaekJoon
[JAVA] 백준 1874 : 스택 수열
블스뜸
2025. 3. 31. 17:46
import java.io.*;
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));
StringBuilder result = new StringBuilder();
int count = Integer.parseInt(br.readLine());
NodeManager nodeManager = new NodeManager();
int pushCnt = 1;
for (int i = 0; i < count; i++) {
int value = Integer.parseInt(br.readLine());
// 비었을 때, value == top일 때, top < value일 때 + pushCnt <= value, top < value + pushCnt > value, top > value
if (nodeManager.isEmpty()) {
for (int j = pushCnt; j <= value; j++) {
nodeManager.push(new StackNode(j));
result.append("+\n");
pushCnt++;
}
nodeManager.pop();
result.append("-\n");
} else if (nodeManager.peek() == value) {
nodeManager.pop();
result.append("-\n");
} else if(nodeManager.peek() < value && pushCnt <= value){
for(int j = pushCnt; j <= value; j++){
nodeManager.push(new StackNode(j));
result.append("+\n");
pushCnt++;
}
nodeManager.pop();
result.append("-\n");
}else{
result = new StringBuilder("NO");
break;
}
}
bw.write(String.valueOf(result));
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 StackNode pop() {
if (isEmpty()) return null;
StackNode node = top;
top = top.getPrevNode() == null ? null : top.getPrevNode();
size--;
return node;
}
public int peek() {
return top.getValue();
}
}