기타/백준
백준 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());
}