백준
BOJ[JAVA] 1874 스택수열
양갱이요
2023. 4. 9. 19:52
https://www.acmicpc.net/problem/1874
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine()); // 1 <= n <= 100,000
int[] num = new int[n+1]; // 수열 저장할 배열
Stack<Integer> stack = new Stack<>(); // 스택
// 배열에 수열 저장
for(int i=1;i<=n;i++) {
num[i] = Integer.parseInt(br.readLine());
}
int cnt = 1; // 수열의 몇번째 수까지 완성되었는지 저장
for(int i=1;i<=n;i++) {
stack.push(i);
sb.append("+\n"); // push 연산 : "+" 출력
while(!stack.isEmpty() && stack.peek() == num[cnt]) { // 스택의 탑에 있는 수와 수열의 cnt번째 수가 같다면
stack.pop(); // 스택에서 숫자 꺼내기
sb.append("-\n"); // pop 연산 : "-" 출력
cnt++; // cnt+1
}
}
if(!stack.isEmpty()) {
sb.setLength(0); // stringbuilder 초기화
sb.append("NO");
}
System.out.println(sb.toString());
}
}