백준

백준 [1874]번: 스택 수열 (Java)

하루우울루 2023. 2. 12. 13:50

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

 

개발환경은 eclipse 사용했습니다.

 

 

import java.util.*;

public class Main
{
	public static void main(String[] args) 
	{
		Scanner sc = new Scanner(System.in);

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

		StringBuilder sb = new StringBuilder();

		int t = sc.nextInt();
		int j=1;
		boolean error = true;

		for(int i=0;i<t;i++)
		{
			int n = sc.nextInt();
		
			for(;j<=n;j++)
			{
				stack.push(j);
				sb.append("+"+'\n');
			}

			if(stack.peek() == n)
			{
				stack.pop();
				sb.append("-"+'\n');
			}	

			else
			{
				error = false;
				break;
			}

		}

		if(error)
		{
			System.out.println(sb);
		}
		else
		{
			System.out.print("NO");
		}

		sc.close();
	}
}

 

처음 문제를 봤을 때 문제이해를 잘 못해서 고민을 많이 했다....

 

pop()으로 나온 순서대로 수열이 완성되는 건데 "스택에 저장된 걸 출력해야지"라고 생각했고

문제에서 "스택에 push 하는 순서는 반드시 오름차순을 지키도록 한다고 하자" 이 문구에 꽂혀서 생각했던 답이 예제 1번 답과 달라서 당황했다.  

 

결국 검색해 보고 다른 분의 코드를 보고 나서 문제를 이해했다

 

 

StringBuilder 쓰는 게 익숙지가 않아서 버벅거린 것 같다.