황소영님 블로그 참고했습니다.
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>(); //Stack 인스턴스 생성
for (int i = 0; i < arr.Length; i++) //for문을 돌려 나열
{
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");
}
}
}
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 1120 문자열(미완) (0) | 2023.01.13 |
---|---|
[BOJ] 10173 니모를 찾아서 (0) | 2023.01.12 |
[BOJ] 4458 첫 글자를 대문자로 (0) | 2023.01.12 |
[BOJ] 2711 오타맨 고창영 (0) | 2023.01.12 |
[BOJ] 9086 문자열 (0) | 2023.01.12 |