집게사장의 꿈

백준 C# 28278 스택 2 본문

기타/백준

백준 C# 28278 스택 2

Krapboss 2024. 6. 6. 08:53

 

 

구현하라길래 스택을 만들었는데 시간 초과
using System;
using System.Linq;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int iter = int.Parse(Console.ReadLine());

            Stack stack = new Stack(iter);

            for (int i = 0; i < iter; i++)
            {
                //명령 받기
                int[] numbers = Console.ReadLine().Trim().Split().Select(x => int.Parse(x)).ToArray();

                switch (numbers[0])
                {
                    case 1://스택에 넣기
                        stack.Push(numbers[1]);
                        break;
                    case 2://pop
                        Console.WriteLine(stack.Pop());
                        break;
                    case 3://정수의 개수 출력
                        Console.WriteLine(stack.Count); 
                        break;
                    case 4://empty
                        Console.WriteLine(stack.IsEmpty);
                        break;
                    case 5://peek
                        Console.WriteLine(stack.Peek());
                        break;
                }
            }
        }
    }

    public class Stack
    {
        public Stack(int index) => array = new int[index];

        int[] array;
        int _currentIndex = -1;

        public int Count=>_currentIndex +1;
        public int IsEmpty => _currentIndex > 0 ? 0 : 1;

        public void Push(int x)
        {
            if (_currentIndex >= array.Length-1) return;
            array[++_currentIndex] = x;
        }
        public int Pop()
        {
            if (_currentIndex < 0) return -1;

            int tmp = array[_currentIndex];
            _currentIndex--;

            return tmp;
        }

        //return 0 if arrray are not null
        public int Peek()
        {
            if(_currentIndex > -1)
            {
                return array[_currentIndex];
            }
            else
            {
                return -1;
            }
        }
    }
}

 

 

Console.WriteLine을 StringBilder로 통합해서 출력함
static void Main(string[] args)
{
    Stack<int> stack = new Stack<int>();

    int iter = int.Parse(Console.ReadLine());
    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 0; i < iter; i++)
    {
        //명령 받기
        int[] numbers = Console.ReadLine().Trim().Split().Select(x => int.Parse(x)).ToArray();

        switch (numbers[0])
        {
            case 1://스택에 넣기
                stack.Push(numbers[1]);
                break;
            case 2://pop
                stringBuilder.Append($"{(stack.Count > 0 ? stack.Pop() : -1)}\n");
                break;
            case 3://정수의 개수 출력
                stringBuilder.Append($"{(stack.Count)}\n");
                break;
            case 4://empty
                stringBuilder.Append($"{(stack.Count < 1 ? 1 : 0)}\n");
                break;
            case 5://peek
                stringBuilder.Append($"{(stack.Count > 0 ? stack.Peek() : -1)}\n");
                break;
        }
    }

    Console.WriteLine(stringBuilder.ToString());
}

'기타 > 백준' 카테고리의 다른 글

백준 C# 2475 검증수  (0) 2024.07.04
백준 C# 2231 분해합  (0) 2024.07.04
백준 c# 4949 균형잡힌 세상  (0) 2024.06.09
백준 C# 9012 괄호  (0) 2024.06.09
백준 C# 10773 제로  (0) 2024.06.06