문제 해석
- 입력받은 테스트 수 T 만큼 괄호로 구성된 문자열을 입력받는다.
- 그중 올바르 괄호 문자열(VPS)를 찾으면 되는 문제인데, 예를 들어 설명하면 아래와 같다.
코드
import java.io.*;
public class Main {
static int size = 0;
static char[] stack;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for(int i = 0; i < T; i++) {
size = 0;
String str = br.readLine();
stack = new char[str.length()];
for (int j = 0; j < str.length(); j++) {
if (str.charAt(j) == '(') {
push(str.charAt(j));
} else {
if (size == 0) {
push(str.charAt(j));
} else {
pop();
}
}
}
if (empty()) {
bw.write("YES" + "\n");
} else {
bw.write("NO" + "\n");
}
}
br.close();
bw.flush();
bw.close();
}
static void push(char ch){
stack[size] = ch;
size++;
}
static void pop(){
if(stack[size-1] == '('){
stack[size-1] = '\0' ;
size--;
}
}
static boolean empty(){
if(size == 0){
return true;
}
return false;
}
static char top(){
if(!empty()){
return '\0';
}
return stack[size-1];
}
}
결과
느낀 점
- 처음에 생소한 VPS라는 용어가 나와서 어렵겠다고 생각은 했는데 stack.length를 기준으로 VPS 여부를 따지는 것이 아니라 따로 뺀 size를 기준으로 VPS를 따져야하는게 알고나면 왜 헤맸지? 싶지만 막 풀기 시작했을 땐 그걸 생각을 못해서 애를 좀 먹었다.
- 또 스택안에 )만 있을 경우를 체크해주는 부분에서 간단한데 그 간단한 방법을 생각하지 못해 애를 먹었다.