백준 1874번 스택 수열 (C#)

김보근·2025년 7월 22일

백준

목록 보기
46/62

백준 1874번 스택 수열 (C#)

오늘은 백준 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");
            }
        }
    }
}

느낀 점

처음에는 입력값을 바로 스택에 넣는다고 생각해서 많이 헷갈렸지만,
한 단계씩 따라가면서 정리하니 로직이 깔끔하게 정리됐다.

profile
게임개발자꿈나무

0개의 댓글