플밍/문제풀이

[SWEA, Java] 괄호 짝짓기

kkap999 2022. 2. 8. 16:06
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14eWb6AAkCFAYD 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

그냥 스택을 응용하는 기본 문제일 뿐이지만, 아스키코드를 활용해서 코드를 간단하게 짤 수 있어서 적어봤다.

import java.io.*;
import java.util.*;
 
public class Solution {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        TC: for (int tc = 1; tc <= 10; tc++) {
            int l = Integer.parseInt(br.readLine());
            String s = br.readLine();
            Stack<Character> stack = new Stack<>();
            System.out.print("#" + tc + " ");
 
            for (int i = 0; i < l; i++) {
                char c = s.charAt(i);
                if (c == '(' || c == '[' || c == '{' || c == '<') {
                    // 여는 괄호
                    stack.push(c);
                } else {
                    // 닫는 괄호: 아스키코드번호 차이 2이내여야함
                    if (Math.abs(c - stack.peek()) > 2) {
                        System.out.println(0);
                        continue TC;
                    } else {
                        // 유효한경우
                        stack.pop();
                    }
                }
            }
 
            if (stack.isEmpty())
                System.out.println(1);
            else
                System.out.println(0);
 
        } // end TC
    } // end main
} // end Class