코딩 테스트/BOJ

C# 9012 괄호

s0002 2023. 1. 11. 18:03
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Study10
{
    class App
    {
        //생성자 
        public App()
        {
            string[] arr = {
                "(())())",
                "(((()())()",
                "(()())((()))",
                "((()()(()))(((())))()",
                "()()()()(()()())()",
                "(()((())()("
            };

            //여기서부터 코드 작성 

            Stack<char> stack = new Stack<char>();

            for (int i = 0; i < arr.Length; i++)
            {
                stack.Clear(); //스택을 비워줘야 이전에 들어갔던 값들이 사라짐

                if (arr[i][0] == ')') //스택에 들어갈 첫번째 값이 ')'이면 바로 NO 출력
                {
                    Console.WriteLine("NO");
                    break;
                }

                for (int j = 0; j < arr[i].Length; j++) 
                {
                    if (stack.Count == 0) // for문 시작하면 스택에 처음 들어가는 값은 항상 '('
                    {
                        stack.Push(arr[i][j]);
                        continue;
                    }

                    if (stack.Peek() == arr[i][j]) //직전에 들어간 값이 현재 들어갈 값과 같으면 스택에 저장
                    {
                        stack.Push(arr[i][j]);
                    }
                    else if (stack.Peek() != arr[i][j]) //다르면 저장하지 않고 Pop을 한 후 다음 순서로 넘어간다
                    {                               //괄호의 짝이 맞으므로 꺼낸것임
                        stack.Pop();
                        continue;
                    }
                }
                if (stack.Count == 0) //안쪽 for문이 끝난 후 stack.Count가 0이면 모든 괄호의 짝이 맞았다는 뜻
                {
                    Console.WriteLine("YES");
                }
                else
                {
                    Console.WriteLine("NO");
                }
            }

            //결과 출력 
            //NO
            //NO
            //YES
            //NO
            //YES
            //NO
        }
    }
}

 

https://www.acmicpc.net/problem/9012

'코딩 테스트 > BOJ' 카테고리의 다른 글

C# 2711 오타맨 고창영  (0) 2023.01.12
C# 9086 문자열  (0) 2023.01.12
C# 15828 라우터  (0) 2023.01.11
배열에서 최댓값, 최솟값 구하기  (0) 2023.01.10
C# 27110 특식 배부  (0) 2023.01.10