알고리즘 문제풀이/백준
[BOJ][JAVA] 9012 - 괄호
쑤테크
2021. 9. 21. 22:43
문제 출처 : https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
문제
설명
괄호 짝 판별 문제는 대표적인 스택문제이기 때문에, 스택 사용하신다면 큰 문제 없이 풀 수 있으실 것입니다.
여기서 키 포인트 두 가지는 다음과 같습니다.
1. VSP이려면 "(" 와 ")" 의 갯수가 동일해야 합니다.
2. 갯수와 상관없이 왼쪽에서 오른쪽 방향으로 진행하는 도중에 "(" 의 갯수보다 ")" 의 갯수가 더 많이 나온다면 그 뒤는 볼 것도 없이 VSP가 아닙니다.
이것을 스택에 구현하면 됩니다.
코드
import java.util.Scanner;
import java.util.Stack;
public class BOJ_9012{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
Stack<String> stack = new Stack<>();
String[] answer = new String[num];
for(int i=0; i<num; i++) {
String s = sc.next();
String[] arr = s.split("");
for(int j=0; j<arr.length; j++) {
if(stack.empty())//스택이 비어있으면 일단 푸시
stack.push(arr[j]);
else {
if(arr[j].equals("("))
stack.push(arr[j]);
else{
if(stack.peek().equals("(")) //짝이 맞음
stack.pop();
else
stack.push(arr[j]);
}
}
}
if(stack.empty())
answer[i]="YES";
else
answer[i]="NO";
stack.clear();
}
sc.close();
for(String s : answer)
System.out.println(s);
}
}