일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코딩테스트
- 시작
- blender
- 택시 기하학
- 2025 대한민국 채용박람회
- 그리디 알고리즘
- 큐
- 라자냐
- 다이나믹프로그래밍
- T자형 인재
- 이진 탐색
- windows 12
- vrm posing desktop
- VRoid Studio
- VPS
- 배열 리스트
- c#
- 빅오 표기법
- 닌텐도 스위치 2
- 브루트포스 알고리즘
- 카니발대학교 공대강국
- i자형 인재
- 스택
- 영어
- 우선순위 큐
- 자료구조
- 마인크래프트
- 잴다의 전설 티어스 오브 더 킹덤
- 그래픽 디자인
- unity engine
Archives
- Today
- Total
WalkerJei's Lifelog
백준알고리즘 10828번 스택 C# 본문
세부 정보
- 사이트: 백준알고리즘
- 번호: 10828
- 문제명: 스택
- 언어: C#
- 분류: 구현, 자료 구조, 스택
- 비고:
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
풀이
어제처럼 Contains(), AppendLine(), StringBuilder를 활용해 보자.
using System.Collections;
using System.Text;
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
StringBuilder sb = new StringBuilder();
Stack stack = new Stack();
int testCase = Convert.ToInt32(sr.ReadLine());
// command가 0보다 클 때 동안만 실행되며 1씩 감소
while (testCase-- > 0)
{
string input = sr.ReadLine();
// push 입력을 Contains()로 감지하면
if (input.Contains("push"))
// 입력값을 공백으로 구분해 1번째 배열에 있는 값을 스택에 대입
stack.Push(input.Split()[1]);
else if (input == "pop")
sb.AppendLine(stack.Count > 0 ? stack.Pop().ToString() : "-1");
else if (input == "size")
sb.AppendLine(stack.Count.ToString());
else if (input == "empty")
sb.AppendLine(stack.Count == 0 ? "1" : "0");
else if (input == "top")
sb.AppendLine(stack.Count > 0 ? stack.Peek().ToString() : "-1");
}
sw.WriteLine(sb);
sr.Close();
sw.Close();
후기
어제 배운 작성 방식을 복습하는 순간이었다. 문제를 풀 때 따로 시간을 재지는 않았지만 풀이에서 소개한 개념을 알고 있다면 20분 내로 풀 수 있는 문제 같다. 중간에 empty 입력 시 실행할 구문에서 조금 길을 잃었지만 빠르게 잘 대응한 것 같다. 실제 코딩테스트 때 예상과 다른 값이 나오면 당황하기 쉽기 마련이다. 이러한 상황 속에서도 제한시간이 낭비되기 때문에 빠르게 잘못 작성한 코드를 찾는 능력이 필요하다.
'소프트웨어 개발 > 코딩테스트(기성 문제)' 카테고리의 다른 글
백준알고리즘 2164번 카드2 C# (0) | 2025.04.01 |
---|---|
백준알고리즘 11659번 구간 합 구하기 4 C# (0) | 2025.03.31 |
백준알고리즘 18258번 큐 2 C# (0) | 2025.03.29 |
백준알고리즘 10733번 제로 C# (0) | 2025.03.28 |
백준알고리즘 2501번 약수 구하기 C# (0) | 2025.03.27 |