문제에 대한 자세한 정보는 백준 | 9012번 : 괄호에서 확인할 수 있다.
2가지 방법으로 풀어봤다. 하나는 Stack을 사용하는 방법, 하나는 '(', ')' 개수를 세며 푸는 방법이다.
Stack 사용
vps 변수가 없고 4번에서 stack이 비어있다. 조건만 있으면 "( ( ) ) )" 이 경우에 3-3에서 break되지만 stack은 비어있는게 맞기 때문에 4번에서 "YES"가 출력된다. 따라서 vps 변수를 선언해서 추가 조건을 만들어줬다.
'(', ')' 개수 세기
Stack 사용
import java.io.*;
import java.util.*;
public class Main {
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 N = Integer.parseInt(br.readLine());
Stack<Character> stack;
for (int i = 0; i < N; i++) {
String temp = br.readLine();
boolean vps = true;
stack = new Stack<>();
if (temp.charAt(0) == ')' || temp.charAt(temp.length() - 1) == '(') {
bw.write("NO\n");
continue;
}
for (int j = 0; j < temp.length(); j++) {
if (temp.charAt(j) == '(') {
stack.push('(');
} else {
if (!stack.empty()) {
stack.pop();
} else {
vps = false;
break;
}
}
}
if (vps && stack.empty()) {
bw.write("YES\n");
} else {
bw.write("NO\n");
}
}
br.close();
bw.close();
}
}
'(', ')' 개수 세기
import java.io.*;
import java.util.*;
public class Main {
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 N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
String temp = br.readLine();
int cnt_l = 0;
int cnt_r = 0;
if (temp.charAt(0) == ')' || temp.charAt(temp.length() - 1) == '(') {
bw.write("NO\n");
continue;
}
for (int j = 0; j < temp.length(); j++) {
if(temp.charAt(j) == '(')
cnt_l++;
else if(temp.charAt(j) == ')')
cnt_r++;
if(cnt_l < cnt_r) {
break;
}
}
if(cnt_l == cnt_r)
bw.write("YES\n");
else
bw.write("NO\n");
}
br.close();
bw.close();
}
}
Stack 사용
메모리 : 11916KB
시간 : 80ms
'(', ')' 개수 세기
메모리 : 11828KB
시간 : 80ms
자료구조 수업에서 stack을 배우며 해봤던 문제라 그렇게 어렵지 않았다.