정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- 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 |