본문 바로가기
코딩테스트/programming_JAVA

[Java] baekjoon_9012 : 괄호

by prometedor 2023. 12. 31.

자료 구조, 문자열, 스택

괄호 : Silver4

 

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

 

 

풀이

import java.io.*;
import java.util.*;

public class Main {
  public static void main(String[] args) throws Exception {
    
    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 str = br.readLine();
      bw.write(checkParentheses(str));
    }

    bw.newLine();
    bw.flush();
    bw.close();
  }

  private static String checkParentheses(String str) {
    Stack<Character> stack = new Stack<>();

    for (int i = 0; i < str.length(); i++) {
      char ch = str.charAt(i);

      if (ch == '(') {
        stack.push(ch);
      } else if (ch == ')') {
        if (stack.isEmpty()) {
          return "NO\n"; // 여는 괄호 없이 닫는 괄호가 나올 경우
        } else {
          stack.pop();
        }
      }
    }

    if (stack.isEmpty()) {
      return "YES\n"; // 괄호가 쌍을 이룸
    } else {
      return "NO\n"; // 여는 괄호가 남아있음
    }
  }
}

 

ㄴ 스택을 이용하였다.

 

 


 

 

문제점 : 괄호의 여는 부분과 닫는 부분의 개수를 카운팅하여 문제를 풀려고 하였더니 예제입력2로 테스트 시 출력결과가 맞지 않게 나왔다.

해결 방법 : 혹시 스택을 쓸 수 있을까 생각해서 스택을 이용하여서 해결하였다.

깨달은 바 : 여러가지 입력을 테스트하면서 문제를 풀어야겠다는 생각이 들었다.