https://www.acmicpc.net/problem/9012
문자열을 iterate 하며 아래 조건에 따라 스택에 넣고 뺐다 :
그 뒤 stack 이 empty 하다면 올바른 괄호를 가졌으니 YES 리턴 , 아니라면 NO 리턴을 하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int inputNum = Integer.parseInt(br.readLine());
// Input 처리
String[] inputStr = new String[inputNum];
for (int i = 0; i < inputNum ; ++i)
{
inputStr[i] = br.readLine();
}
for (String s : inputStr)
{
Stack<Character> myStack = new Stack<>();
myStack.push((s.charAt(0)));
for (int j = 1; j < s.length(); ++j)
{
Character character = s.charAt(j);
if (myStack.isEmpty())
{
// Empty 하다면 그냥 push
myStack.push(character);
}
else
{
Character currentChar = myStack.peek();
if (currentChar.equals(character))
{
// 같다면 push
myStack.push(character);
}
else if (currentChar.equals(')') && character.equals('('))
{
// 다르지만 valid 한 형태가 아닌 경우
myStack.push(character);
}
else
{
// 다르다면 remove
myStack.pop();
}
}
}
System.out.println(myStack.isEmpty() ? "YES" : "NO");
}
}
}