C# 10828번 스택

2022. 2. 9. 16:29C#/[백준] 스택

문제

수정 전 코드 :

using System;
using System.Collections;
using System.Text;
namespace _1
{
    class Program
    {
        static void Main(string[] args)
        {
            Stack stack = new Stack();
            int N = Convert.ToInt32(Console.ReadLine());

            StringBuilder sb = new StringBuilder();            
            for (int i = 0; i < N; i++)
            {
                string[] input = Console.ReadLine().Split(' ');
                switch(input[0])
                {
                	//PUSH
                    case "push":
                        stack.Push(input[1]);
                        break;
                    //POP
                    case "pop":
                        {
                            if (stack.Count != 0)
                                sb.AppendLine(stack.Pop().ToString());
                            else
                                sb.AppendLine("-1");
                            break;
                        }
                    //SIZE
                    case "size":
                        sb.AppendLine(stack.Count.ToString());
                        break;
                    //EMPTY
                    case "empty":
                        {
                            if (stack.Count == 0)
                                sb.AppendLine("1");
                            else
                                sb.AppendLine("0");
                            break;
                        }
                    //TOP
                    case "top":
                        {
                            if (stack.Count != 0)
                                sb.AppendLine(stack.Peek().ToString());
                            else
                                sb.AppendLine("-1");
                            break;
                        }
                }     
            }

            Console.WriteLine(sb);
        }
    }
}

스택의 기본적인 구조를 이해할 수 있는 문제이다. Swich-case문을 통해 쉽게 구현이 가능하며 case안을 if문을 통해 좀더 세세하게 쪼개서 구현할 수 있다. 시간초과가 뜰 수 있기 때문에 stringbuilder()를 사용했다.

수정 후 코드 :

using System;
using System.Collections;
using System.Text;
namespace _1
{
    class Program
    {
        static void Main(string[] args)
        {
            Stack stack = new Stack();
            int N = Convert.ToInt32(Console.ReadLine());

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < N; i++)
            {
                string[] input = Console.ReadLine().Split(' ');
                switch(input[0])
                {
                    //push
                    case "push":
                        stack.Push(input[1]);
                        break;
                    //pop
                    case "pop":
                        {
                            sb.AppendLine(stack.Count != 0 ? stack.Pop().ToString() : "-1");
                            break;
                        }
                    //size
                    case "size":
                        sb.AppendLine(stack.Count.ToString());
                        break;
                    //empty
                    case "empty":
                        {
                            sb.AppendLine(stack.Count == 0 ? "1" : "0");
                            break;
                        }
                    //top
                    case "top":
                        {
                            sb.AppendLine(stack.Count != 0 ? stack.Peek().ToString() : "-1");
                            break;
                        }
                }     
            }

            Console.WriteLine(sb);
        }
    }
}

삼항 연산자를 통해 case문 안에 있던 if문들을 한 줄로 표현하였다. 이게 좀더 짧아서 보기 좋은거같다.

'C# > [백준] 스택' 카테고리의 다른 글

C# 17298번 오큰수  (0) 2022.02.15
C# 1874번 스택 수열  (0) 2022.02.15
C# 4949번 균형잡힌 세상  (0) 2022.02.15
C# 9012번 괄호  (0) 2022.02.09
C# 10773번 제로  (0) 2022.02.09