알고리즘 C#

백준 10828번 스택 C#으로 문제 풀어보기

minsoungdev 2025. 10. 20. 23:56

안녕하세요 박민성입니다.

 

오늘은 백준 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를 출력해 주면 끝입니다.

이것이 전체 코드입니다. 

 

이렇게 백준에 제출하였더니

정답이었습니다.