[BOJ] 1874 스택 수열

SSOYEONG·2022년 5월 9일
0

Problem Solving

목록 보기
44/60
post-thumbnail

🔗 Problem

https://www.acmicpc.net/problem/1874

👩‍💻 Code

package baekjoon;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;
import java.io.IOException;

// 스택 수열

public class BJ1874 {
	
	static int n;
	static int x;
	static int popped;		// 가장 마지막에 pop된 값
	static int pushed;		// 수열 1~n 중 어디까지 push 했는지
	static Stack<Integer> stack = new Stack<>();
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		n = Integer.parseInt(br.readLine());
		
		for(int i = 0; i < n; i++) {
			x = Integer.parseInt(br.readLine());
			if(x > popped) {
				for(int j = pushed + 1; j <= x; j++) {
					stack.add(j);
					sb.append("+\n");
				}
				pushed = x;
				popped = stack.pop();
			}
			else {
				popped = stack.pop();
				if(popped != x) {
					System.out.println("NO");
					System.exit(0);
				}
			}
			
			sb.append("-\n");
		}
		
		System.out.println(sb.toString());
	}
}

📌 Note

아이디어

  • push 시 1~n 순서대로 넣어야 하기 때문에 어느 값까지 넣었는지 pushed에 담았다.
  • 스택 안 정해진 순서대로 pop되어야 하는 것을 고려했다.
profile
Übermensch

0개의 댓글