반응형
[ 문제 ]
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- 1 X: 정수 X를 스택에 넣는다. (1 ≤ X ≤ 100,000)
- 2: 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
- 3: 스택에 들어있는 정수의 개수를 출력한다.
- 4: 스택이 비어있으면 1, 아니면 0을 출력한다.
- 5: 스택에 정수가 있다면 맨 위의 정수를 출력한다. 없다면 -1을 대신 출력한다.
[ 코드 ]
1. 리스트로 풀기
var sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
var sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
int n = int.Parse(sr.ReadLine());
List<int> nList = new List<int>();
for (int i = 0; i < n; i++)
{
string[] arr = sr.ReadLine().Split();
if (arr[0] == "1")
{
int num = int.Parse(arr[1]);
nList.Add(num);
}
else if (arr[0] == "2")
{
if (nList.Count > 0)
{
int lastItem = nList.Last();
nList.RemoveAt(nList.Count - 1);
sw.WriteLine(lastItem);
}
else
{
sw.WriteLine("-1");
}
}
else if (arr[0] == "3")
{
sw.WriteLine(nList.Count);
}
else if (arr[0] == "4")
{
if (nList.Count > 0)
{
sw.WriteLine("0");
}
else
{
sw.WriteLine("1");
}
}
else if (arr[0] == "5")
{
if (nList.Count > 0)
{
int lastItem = nList[nList.Count - 1];
sw.WriteLine(lastItem);
}
else
{
sw.WriteLine("-1");
}
}
}
sw.Flush();
sw.Close();
sr.Close();
2. 스택으로 풀기
var sr = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
var sw = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
int n = int.Parse(sr.ReadLine());
Stack<int> nStack = new Stack<int>();
for (int i = 0; i < n; i++)
{
string[] arr = sr.ReadLine().Split();
if (arr[0] == "1")
{
int num = int.Parse(arr[1]);
nStack.Push(num);
}
else if (arr[0] == "2")
{
if (nStack.Count > 0)
{
sw.WriteLine(nStack.Pop());
}
else
{
sw.WriteLine("-1");
}
}
else if (arr[0] == "3")
{
sw.WriteLine(nStack.Count);
}
else if (arr[0] == "4")
{
if (nStack.Count > 0)
{
sw.WriteLine("0");
}
else
{
sw.WriteLine("1");
}
}
else if (arr[0] == "5")
{
if (nStack.Count > 0)
{
sw.WriteLine(nStack.Peek());
}
else
{
sw.WriteLine("-1");
}
}
}
sw.Flush();
sw.Close();
sr.Close();
- Push: 스택에 요소를 추가할 때
- Pop: 스택의 맨 위 요소를 빼고 출력할 때
- Peek: 스택의 맨 위 요소를 확인할 때
그렇게 크게 차이는 안나는 것 같다.
[ 실행화면 ]
문제링크: https://www.acmicpc.net/problem/28278
반응형
'Language > C#' 카테고리의 다른 글
[C#] 백준 2747번 피보나치 수 (0) | 2024.02.24 |
---|---|
[C#] 백준 1075번 나누기 (0) | 2024.02.24 |
[C#] 백준 10814번 나이순 정렬 (0) | 2024.02.23 |
[C#] 백준 1100번 하얀 칸 (0) | 2024.02.23 |
[C#] 백준 28114번 팀명 정하기 (2) | 2024.02.21 |