오늘은 백준 1874번 "스택 수열" 문제를 풀어봤다.
이 문제는 스택의 기본적인 동작을 이해하고 있으면 어렵지 않지만,
처음에는 조금 헷갈릴 수 있는 문제였다.

https://www.acmicpc.net/problem/1874
문제 요약
1부터 N까지의 수를 스택에 push하거나 pop해서
주어진 수열을 만들 수 있는지를 확인하는 문제다.
push할 때는 반드시 1부터 차례대로 증가하는 숫자를 사용해야 하고
pop은 스택의 가장 위에 있는 숫자만 가능하다
결과로는 push는 +로, pop은 -로 출력해야 한다.
풀이 아이디어
1부터 차례로 push하면서
원하는 숫자가 나오면 pop으로 꺼내고
만약 스택의 top이 원하는 숫자가 아닐 경우에는
➔ 그 수열은 만들 수 없으므로 "NO"를 출력
작성한 코드
using System;
using System.Collections.Generic;
using System.Text;
namespace backjoon
{
internal class Program
{
static void Main()
{
int testCase = int.Parse(Console.ReadLine());
Stack<int> stack = new Stack<int>();
StringBuilder sb = new StringBuilder();
int num = 1;
bool isPossible = true;
for (int i = 0; i < testCase; i++)
{
int input = int.Parse(Console.ReadLine());
while (num <= input)
{
stack.Push(num);
sb.AppendLine("+");
num++;
}
if (stack.Peek() == input)
{
stack.Pop();
sb.AppendLine("-");
}
else
{
isPossible = false;
break;
}
}
if (isPossible)
{
Console.WriteLine(sb);
}
else
{
Console.WriteLine("NO");
}
}
}
}
처음에는 입력값을 바로 스택에 넣는다고 생각해서 많이 헷갈렸지만,
한 단계씩 따라가면서 정리하니 로직이 깔끔하게 정리됐다.