안녕하세요 박민성입니다.
오늘은 백준 10829번 스택을 풀어 보겠습니다.
스택은 어제 풀어본 큐와 비슷하여 거의 2분 만에 맞추었습니다.

문제를 보면
입력은 첫째 줄에는 1보다 크거나 같고 10,000보다 작거나 같은 명령의 수 N이 주어지고 다음 줄부터 명령어가 주어집니다.
출력은 명령어에 따라 한 줄씩 출력합니다.
명령어들은
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
이렇게입니다.
저는 이 문제를 보고 Stack을 사용하면 된다고 생각했습니다.
그리고 모두 어제 풀었던 큐에서 코드를 가져오면 된다고 생각했습니다.
일단은

이렇게 출력을 명령어 N (1 ≤ N ≤ 10,000) 마다 해주면 시간이 너무 걸릴 것 같아 StringBuilder을 객체 생성해 주고
Stack를 사용할 거니 Stack도 해주었습니다.
그리고 명령어의 수 N도 a에 입력받아 담아줍니다.

명령어 수만큼 for문을 돌려주고 안에는 명령어를 입력받아줍니다.
그 명령어는 switch문에 넣어서 구현해 줄 겁니다.
일단은 하나하나 구현해 보겠습니다.
- push X: 정수 X를 스택에 넣는 연산이다.

이렇게 stack에 X를 넣어줍니다. 처음에는 변수 b 쪽에 같이 이름을 c로 arr [1]을 담아 두려고 했지만 생각해 보니 여기서만 사용하고 입력받을 때 오류가 뜰 수가 있다고 생각하고 여기로 뺏습니다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

이렇게 stack에 Count를 확인해서 0이면 -1을 sb에 넣어주고 stack에 정수가 있으면 그 정수를 빼서 sb에 넣어줍니다.
- size: 스택에 들어있는 정수의 개수를 출력한다.

이거는 그냥 stack에 Count를 sb에 넣어주면 됩니다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.

empty는 stack에 Count가 0이면 sb에 1을 넣어주고 아니면 0을 넣어줍니다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

이거는 조금 다르게 코드를 썼습니다. 원래는 객체를 한 개 더 만들어서 복사해서 했는데
찾아보니 Peek라는 함수가 자료구조에서 빼지 않고 출력인걸 알았습니다. 그래서 그걸 sb에 넣어줍니다
마지막으로

sb를 출력해 주면 끝입니다.

이것이 전체 코드입니다.
이렇게 백준에 제출하였더니

정답이었습니다.
'알고리즘 C#' 카테고리의 다른 글
| ★백준 1874번 스택 수열 C#으로 문제 풀어보기★ (0) | 2025.10.30 |
|---|---|
| ★백준 10799번 쇠막대기 C#으로 문제 풀어보기★ (0) | 2025.10.28 |
| 백준 10845번 큐 C#으로 문제 풀어보기 (0) | 2025.10.19 |
| 백준 1735번 분수 합 C#으로 문제 풀어보기 (0) | 2025.10.18 |
| 백준 2164번 카드2 C#으로 문제 풀어보기 (0) | 2025.10.16 |