C# 4949번 균형잡힌 세상

2022. 2. 15. 22:50C#/[백준] 스택

문제

코드 :

using System;
using System.Collections;
using System.Text;
namespace _4
{
    class Program
    {
        //균형잡힌 괄호
        static public void balanced(Stack stack, int j, string PS)
        {
            //괄호문양이 아닐시에는 stack을 쌓지 않는다.
            if (PS[j] == '(' || PS[j] == ')' || PS[j] == '[' || PS[j] == ']')
            {
                //맨 초기값
                if (stack.Count == 0)
                    stack.Push(PS[j]);
                else
                {
                    // '()' OR '[]' 모양이 만들어질때마다 pop시켜서
                    //stack이 올바른 괄호 문자열이라면 모두 pop될것이고
                    //아니라면 몇개가 남을것이다.
                    if ((stack.Peek().ToString() == "(" && PS[j] == ')') || (stack.Peek().ToString() == "[" && PS[j] == ']'))
                    {
                        stack.Pop();
                    }
                    else
                        stack.Push(PS[j]);
                }
            }
        }
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            while(true)
            { 
                //입력받기
                string PS = Console.ReadLine();

                //break조건

                if (PS == ".")
                    break;
                
                Stack stack = new Stack();

                for (int j = 0; j < PS.Length; j++)
                {
                    balanced(stack, j, PS);
                }
                //stack의 길이가 0일때만 YES
                sb.AppendLine(stack.Count == 0  ? "yes" : "no");
            }
            Console.WriteLine(sb);
        }
    }
}

풀이 설명 :

괄호가 () 혹은 [] 모양으로 완성되어야 한다.  괄호가 '(' 혹은 '[' 모양일때는 계속 스택에 쌓고 괄호가 ')' 혹은 ']' 일때는 스택의 가장 맨위와 해당 괄호의 모양이 잘 맞아 떨어지면 Pop한다.

이런식으로 스택을 모두 비우면 균형잡힌 세상이므로 yes를 출력하고 아니면 no를 출력한다.

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

C# 17298번 오큰수  (0) 2022.02.15
C# 1874번 스택 수열  (0) 2022.02.15
C# 9012번 괄호  (0) 2022.02.09
C# 10773번 제로  (0) 2022.02.09
C# 10828번 스택  (0) 2022.02.09