백준

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());
	}
}