입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
Scanner보다 BufferedReader가 입출력 성능 면에서 훨씬 빠르기 때문.)[1차]
‼️ ())(() → 개수는 맞는데 VPS가 아님
[2차]
[1차]
BufferReader br;
테스트 데이터 개수 N
for(N만큼 반복){
String 입력문자열 = br.readLine()
for(입력문자열 순회){
if("(") 열린괄호++;
if(")") 닫힌괄호++;
}
if(열린괄호 == 닫힌괄호) "Yes" 출력
else "No" 출력
}
[2차]
BufferReader br; 테스트 데이터 개수 N
Stack<Character> stack;
for(N만큼 반복){
String 입력문자열 = br.readLine()
for(char ch : 입력문자열.toCharArray()){
if(ch == '(') stack.push(ch);
else if(ch == ')') stack.pop();
}
if(스택의 마지막 요소 == '(') No 출력
else Yes 출력
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class BOJ9012 {
public static String solve(String ps) {
Stack<Character> stack = new Stack<>();
for (char ch : ps.toCharArray()) {
if (ch == '(') {
stack.push(ch);
}
else if (ch == ')') {
// 닫는 괄호인데 스택이 비어 있으면, 짝이 없으므로 바로 NO
if (stack.isEmpty()) {
return "NO";
}
// 짝이 있으므로 pop
stack.pop();
}
}
// 문자열 순회가 끝난 후 최종 검사
// 스택이 완전히 비어있어야 VPS (YES)
if (stack.isEmpty()) {
return "YES";
} else {
// 스택에 여는 괄호가 남아 있으면 VPS 아님 (NO)
return "NO";
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder(); // 출력을 모으기 위한 StringBuilder
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String ps = br.readLine();
sb.append(solve(ps)).append('\n');
}
System.out.print(sb);
}
}