[SWEA]#1218 괄호 짝짓기

SeungBird·2020년 8월 26일
0

⌨알고리즘(SWEA)

목록 보기
3/31

문제

4 종류의 괄호문자들 '()', '[]', '{}', '<>' 로 이루어진 문자열이 주어진다.

이 문자열에 사용된 괄호들의 짝이 모두 맞는지 판별하는 프로그램을 작성한다.

예를 들어 아래와 같은 문자열은 유효하다고 판단할 수 있다.

{[()]}<>[<{}><>]

아래와 같은 문자열은 유효하지 않은 문자열이다. 기울게 표시된 괄호의 짝을 찾을 수 없기 때문이다.

{[()]}<>[<{}><>[

아래 문자열은 열고 닫는 괄호의 개수는 유효하나 짝이 맞지 않는 괄호가 사용 되었기 때문에 유효하지 않다.

{[()]}<>[<{)><>]

입력

각 테스트 케이스의 첫 번째 줄에는 테스트케이스의 길이가 주어지며, 바로 다음 줄에 테스트 케이스가 주어진다.

총 10개의 테스트케이스가 주어진다.

출력

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 유효성 여부를 1 또는 0으로 표시한다 (1 - 유효함, 0 - 유효하지 않음).

예제 입력 1

16
{[()]}<>[<{}><>]
...

예제 출력 1

#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");
        }
    }
}
profile
👶🏻Jr. Programmer

0개의 댓글