알고리즘/문제풀이
[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