백준 스택 수열 문제

정호윤·2023년 3월 21일

자바

목록 보기
44/46

백준문제링크

스택을 이용한 문제다.문제 설명이 상당히 난해하다.요약하면,스택에는 무조건 수를 1부터 차례대로 넣으며,스택을 넣고 빼고만 해서 주어진 수열을 만들수 있냐?가 문제다.적어놓고도 뭔 소린지 모르겠다.

import java.util.*;
import java.io.*;
import java.time.*;


public class Main {
	public static void main(String args[]) throws IOException {
    Scanner sc = new Scanner(System.in);
    Boolean bl=true;
    Stack<Integer> st = new Stack<>();
    int N = sc.nextInt();
    int num=1;
    // num은 여기서 초기화된 이후 계속 커지기만 한다.이게 맞는건가?싶었는데 문제에서 그러라고 나와있더라.어이없다.
    StringBuffer bf = new StringBuffer();
    for(int i=0;i<N;i++){
      int su = sc.nextInt();
      if(num<=su){
        while(num<=su){
          st.push(num++);
          bf.append("+\n");
        }
        st.pop();
        bf.append("-\n");
      }else{
        int n = st.pop();
        if(n>su){
          System.out.println("NO");
          bl=false;
          break;
        }else{
          bf.append("-\n");
        }
      } 
    }
    if(bl) System.out.println(bf.toString());
  }
}

num은 pop을 한다고 작아지는게 아니라는걸 잊지 말자.num이 입력 숫자보다 클시, 스택의 맨 위의 요소가 숫자와 일치하는게 아닌 이상 무조건 no!다.

profile
개발자로 취직을 희망합니다.

0개의 댓글