4 종류의 괄호문자들 '()', '[]', '{}', '<>' 로 이루어진 문자열이 주어진다.
이 문자열에 사용된 괄호들의 짝이 모두 맞는지 판별하는 프로그램을 작성한다.
예를 들어 아래와 같은 문자열은 유효하다고 판단할 수 있다.
{ | [ | ( | ) | ] | } | < | > | [ | < | { | } | > | < | > | ] |
---|
아래와 같은 문자열은 유효하지 않은 문자열이다. 기울게 표시된 괄호의 짝을 찾을 수 없기 때문이다.
{ | [ | ( | ) | ] | } | < | > | [ | < | { | } | > | < | > | [ |
---|
아래 문자열은 열고 닫는 괄호의 개수는 유효하나 짝이 맞지 않는 괄호가 사용 되었기 때문에 유효하지 않다.
{ | [ | ( | ) | ] | } | < | > | [ | < | { | ) | > | < | > | ] |
---|
각 테스트 케이스의 첫 번째 줄에는 테스트케이스의 길이가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다.
총 10개의 테스트케이스가 주어진다.
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 유효성 여부를 1 또는 0으로 표시한다 (1 - 유효함, 0 - 유효하지 않음).
16
{[()]}<>[<{}><>]
...
#1 1
...
import java.util.Scanner;
import java.util.Stack;
class Solution
{
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T=10;
for(int test_case = 1; test_case <= T; test_case++)
{
int N = sc.nextInt();
sc.nextLine();
char[] arr = sc.nextLine().toCharArray();
Stack<Character> stack = new Stack<Character>();
for(int i=0; i<N; i++) {
if(arr[i]=='{' || arr[i]=='(' || arr[i]=='[' || arr[i]=='<')
stack.push(arr[i]);
else {
if(arr[i]=='}' && stack.peek()=='{')
stack.pop();
else if(arr[i]==']' && stack.peek()=='[')
stack.pop();
else if(arr[i]==')' && stack.peek()=='(')
stack.pop();
else if(arr[i]=='>' && stack.peek()=='<')
stack.pop();
else
stack.push(arr[i]);
}
}
if(stack.size()==0)
System.out.println("#"+test_case+" 1");
else
System.out.println("#"+test_case+" 0");
}
}
}