본문 바로가기
CodingTest/백준

백준 9012번 - 괄호

by 마운틴케이 2023. 9. 28.

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

 

9012번: 괄호

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

www.acmicpc.net


문제 분석

첫번째로 입력될 문자열의 개수가 주어지고,

주어진 문자열에 대해 괄호 문자열의 집합인지 아닌지 판단하여 결과를 YES / NO 로 출력하는 문제이다.

예를 들어 "(())(())" 가 입력으로 주어진다면, 안쪽의 괄호 쌍 (), ()가 있고, 그 괄호를 감싸는 괄호 쌍이 (  ), (  ) 로 이루어져 있으니

YES로 출력하면 된다.


풀이

1. 먼저 t에 받을 문자열 개수 입력받기

2. t만큼 반복하도록 for 문 생성 후, 그 안에서 각각의 문자열을 입력 받도록 함

3. 첫번째 분기에서 2로 나누어 나머지가 0이 아닐 경우 (문자열 길이가 홀수로 들어왔을 경우) 괄호 쌍을 이룰 수 없으므로 바로 NO를 출력하도록 함

4. 문자열 길이가 짝수일 경우, 괄호집합인지 판단할 용도의 boolean 형 flg 변수 생성.

5. 다음으로 while 반복문 내에서 "()" 문자열이 존재하는지 판단, 존재한다면 해당 괄호를 제거하여 더 이상 제거할 괄호가 없을 때까지 반복하도록 함.


코드

public class Example9012 {
    public static void main(String[] args) throws Exception{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(bf.readLine());

        for (int i = 0; i < t; i++) {
            String str = bf.readLine();
            if (str.length() % 2 == 0) {
                boolean flg = false;
                while(!str.equals("")) {
                    flg = false;
                    if (str.indexOf("()") == -1) {
                        System.out.println("NO");
                        break;
                    }
                    str = str.replace("()","");
                    flg = true;
                }
                if (flg) {
                    System.out.println("YES");
                }
                
            } else {
                System.out.println("NO");
            }
        }
    }
}

댓글 피드백은 언제나 환영합니다!

'CodingTest > 백준' 카테고리의 다른 글

백준 1966번 - 프린터 큐  (1) 2023.12.08
백준 1874번 - 스택 수열  (1) 2023.12.08
백준 10845 - 큐  (0) 2023.09.28
백준 4153번 - 직각삼각형  (0) 2023.09.22
백준 1654번 - 랜선 자르기  (0) 2023.09.22