https://www.acmicpc.net/problem/4949
Stack을 이용하여 푸는 문제이다. 전에 비슷한 문제를 풀었던 것 같다.
처음에 틀린 이유는, stack에 괄호가 남아있는 경우의 수를 계산하지 못했기 때문이다.
using System;
using System.IO;
using System.Text;
namespace B4949
{
class Program
{
static void Main()
{
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
StringBuilder sb = new StringBuilder();
Stack<char> stack = new Stack<char>();
while (true)
{
//입력
string input = sr.ReadLine();
//종료 조건
if (input[0] == '.') break;
bool isOK = true; //균형잡혔나
//input의 char 검사
for(int i = 0; i < input.Length; i++)
{
if (input[i] == '(' || input[i] == '[')
{
//여는 괄호면 스택에 넣음
stack.Push(input[i]);
isOK = false;
}
else if (input[i] == ')' || input[i] == ']')
{
//닫는 괄호면 검사
if(stack.Count == 0)
{
//스택에 저장된 괄호가 없다면 종료
isOK = false;
break;
}
var c = stack.Pop();
if (input[i] == ')') //닫는 소괄호
{
if(c != '(')
{
isOK = false;
break;
}
else isOK = true;
}
else if (input[i] == ']') //닫는 대괄호
{
if(c != '[')
{
isOK = false;
break;
}
else isOK = true;
}
}
}
//스택에 괄호가 남아있다면 균형 실패
if (stack.Count > 0) isOK = false;
stack.Clear(); //스택 초기화
//결과
if (!isOK)
{
sb.Append("no\n");
continue;
}
else sb.Append("yes\n");
}
sw.Write(sb);
sr.Close();
sw.Flush();
sw.Close();
}
}
}
'알고리즘 > 백준 BOJ' 카테고리의 다른 글
[ BOJ/C# ] 2193 이친수 (0) | 2023.10.31 |
---|---|
[ BOJ/C# ] 1316 그룹 단어 체커 (1) | 2023.10.30 |
[ BOJ/C# ] 11050 이항 계수 1 (1) | 2023.10.28 |
[ BOJ/C# ] 2108 통계학 (0) | 2023.10.27 |
[ BOJ/C# ] 18110 solved.ac (0) | 2023.10.25 |