본문 바로가기

프로그래밍_백준/Java

Java) 백준 1874 스택 수열

728x90
반응형

프로그램 로직

 

  1. 사용자로부터 수열의 크기(n)를 입력.
  2. 수열의 각 요소를 입력받아 배열(arr)에 저장.
  3. 배열의 각 요소에 대해 다음을 수행:
    • 스택이 비어 있거나, 스택의 맨 위 요소가 현재 배열 요소보다 작으면, 스택에 새로운 값을 '푸시'(+ 연산).
    • 스택의 맨 위 요소가 현재 배열 요소와 같으면, 스택에서 값을 '팝'(- 연산).
    • 스택의 맨 위 요소가 현재 배열 요소보다 크면, 수열을 재구성할 수 없으므로 "NO"를 출력하고 프로그램을 종료.
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		Stack<Integer>stack=new Stack<>();
		ArrayList<String>arr_result=new ArrayList<>();
		int count, n;
		count=1;
		n=in.nextInt();
		int [] arr = new int [n];
		for(int i=0;i<n;i++)
		{
			int num=in.nextInt();
			arr[i]=num;
		}
		for(int i=0;i<n;i++)
		{
			while(true)
			{
				if(stack.isEmpty() || stack.peek()<arr[i])
				{
					stack.add(count);
					arr_result.add("+");
					count++;
				}
				else if(stack.peek()==arr[i])
				{
					stack.pop();
					arr_result.add("-");
					break;
				}
				else
				{
					System.out.println("NO");
					System.exit(0);
				}
			}
		}

		for(int i =0;i<arr_result.size();i++)
		{
			System.out.println(arr_result.get(i));
		}

	}
}
728x90
반응형