백준 10828 : 스택 // 실패

C# 2020. 11. 4. 23:39

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 
둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 
문제에 나와있지 않은 명령이 주어지는 경우는 없다.

:: 실패 이유 : 시간초과

: 개선하지 않는 이유 : 뭐가 문제인지 모르겠다.

: 문제를 못 맞춰서 다른 사람 코드도 볼 수 없고, C# 관련 구글 검색해서 갖다 붙여도 시간초과로 실패함

: 10개 안 풀어서 질문을 올릴 수도 없음, 10개 이상 풀고나서 다음에 확인할 것.

using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace Stack01
{
    class Program
    {
        static void Main(string[] args)
        {
            // :: Initialise
            Stack stack = new Stack();

            // :: Check Command Size
            string input = Console.ReadLine();
            int commandSize = 0;
            try
            {
                commandSize = Int32.Parse(input);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            List<string> inputList = new List<string>();
            // :: Loop Command with Size
            for (int i = 0; i < commandSize; i++)
            {
                string temp = Console.ReadLine();
                inputList.Add(temp);
            }

            foreach (var itm in inputList)
            {
                CheckCommand(itm, stack);
            }

            // :: End Program
            // Console.ReadKey();
        }

        // :: Check Command with String
        public static void CheckCommand(string input, Stack stack)
        {
            string[] command = input.Split(' ');
            switch (command[0])
            {
                case "push":
                    try
                    {
                        int temp = Int32.Parse(command[1]);
                        stack.Push(temp);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                    break;
                case "pop":
                    Console.WriteLine(stack.Pop());
                    break;
                case "size":
                    Console.WriteLine(stack.GetSize());
                    break;
                case "empty":
                    Console.WriteLine(stack.CheckEmpty());
                    break;
                case "top":
                    Console.WriteLine(stack.GetTop());
                    break;
            }
        }
    }

    public class Stack
    {
        private List<int> data;
        private int top;

        public Stack()
        {
            data = new List<int>();
            top = -1;
        }

        public void Push(int input)
        {
            data.Add(input);
            top += 1;
        }

        public int Pop()
        {
            if (top < 0)
            {
                return -1;
            }

            int temp = data[top];
            data.RemoveAt(top);
            top -= 1;

            return temp;
        }

        public int GetTop()
        {
            if (top < 0)
                return top;

            return data[top];
        }

        public int GetSize()
        {
            return data.Count();
        }

        public int CheckEmpty()
        {
            return data.Count() > 0 ? 0 : 1;
        }
    }
}

'C#' 카테고리의 다른 글

백준 10171 : 고양이 // 성공  (0) 2020.11.06
백준 1874 : 스택 수열 // 실패  (0) 2020.11.05
백준 4949: 균형잡힌 세상 // 성공  (0) 2020.11.01
백준 9012 : 괄호 // 성공  (0) 2020.10.31
백준 10773 : 제로 // 성공  (0) 2020.10.30
블로그 이미지

RIsN

,