백준 스택 수열

KIMYEONGJUN·2024년 5월 24일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 줄에 n (1 ≤ n ≤ 100,000)이 주어진다.
둘째 줄부터 n개의 줄에는 수열을 이루는 1이상 n이하의 정수가 하나씩 순서대로 주어진다.
물론 같은 정수가 두 번 나오는 일은 없다.
입력된 수열을 만들기 위해 필요한 연산을 한 줄에 한 개씩 출력한다.
push연산은 +로, pop 연산은 -로 표현하도록 한다. 불가능한 경우 NO를 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader StringBuilder를 사용했다.
입력 방법은 BufferedReader을 사용하여 풀었다.
N 번 반복
start + 1부터 입력받은 value 까지 push를 한다.
+ 를 저장한다. 
다음 push 할 때의 오름차순을 유지하기 위한 변수 초기화 
top에 있는 원소가 입력받은 값과 같이 않은 경우  

코드로 구현

package baekjoon.baekjoon_19;

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

// 백준 1874번 문제
public class Main662 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        Stack<Integer> stack = new Stack<>();

        int n = Integer.parseInt(br.readLine());

        int start = 0;

        while(n -- > 0) {
            int value = Integer.parseInt(br.readLine());

            if(value > start) {
                for(int i = start + 1; i <= value; i++) {
                    stack.push(i);
                    sb.append('+').append('\n');
                }
                start = value;
            } else if(stack.peek() != value) {
                System.out.println("NO");
                return;
            }
            stack.pop();
            sb.append('-').append('\n');
        }
        System.out.println(sb);
        br.close();
    }
}

마무리

백준에서 자료구조를 계속 풀고있는데 실제로 책에봤던 내용을 가지고 풀어보니깐 조금 어렵게 느껴졌다.

profile
Junior backend developer

0개의 댓글