[JAVA/9012번] 괄호

고지훈·2021년 9월 3일
1

Algorithm

목록 보기
3/68
post-thumbnail

문제


입력 및 출력


풀이

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

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

        for (int i = 0; i < count; i++) {
            Stack < String > stack = new Stack < > ();
            String[] strArray = br.readLine().split("");
            boolean isVPS = false;

            for (int j = 0; j < strArray.length; j++) {
                if (strArray[j].equals("(")) {
                    stack.push(strArray[j]);
                } else {
                    if (stack.isEmpty() == true) {
                        isVPS = false;
                        break;
                    } else {
                        isVPS = true;
                        stack.pop();
                    }
                }
            }
            if (isVPS == true && stack.isEmpty() == true) {
                System.out.println("YES");
            } else {
                System.out.println("NO");
            }
        }
    }
}

결과 및 해결방법

[결과]

[정리]

스택(Stack)
LIFO(Last In First Out)형태의 자료구조로, 마지막에 추가한 항목이 가장 먼저 제거될 항목이다. 스택에서는 자주 사용되는 4가지 메소드가 있다.

  • pop(): 스택에서 가장 위에 있는 항목을 제거한다.
  • push(item): item을 스택의 가장 윗 부분에 추가한다.
  • peek(): 스택의 가장 위에 있는 항목을 반환한다.
  • isEmpty(): 스택이 비어있을 경우 true를 반환하고, 비어있지 않을 경우 false를 반환한다.

해결방법

  • 입력받은 괄호 문자열을 쪼개기 위해 split메소드를 사용하였다. split메소드 사용을 통해 반환된 값은 strArray에 넣었다. => strArray는 입력받은 괄호의 개수만큼 배열의 크기가 설정된다.
  • isVPS는 괄호의 개수와 위치가 모두 올바른지 판단하기 위한 변수로 boolean 타입으로 선언하였다. boolean 타입은 참과 거짓으로 이루어져 있다.
  • strArray의 사이즈만큼 반복문을 실행한다. equals메소드를 사용하여 해당 문자가 열린 괄호 "(" 일 경우, 스택에 넣는다.
  • 반대로 닫힌 괄호 ")"일 경우, 스택이 비어있다면 isVPS의 값을 거짓으로 대입하고 반복문을 중지한다. stack에 아무것도 존재하지 않는다는 것은 괄호의 규칙이 깨졌다는 것을 의미하기 때문이다.
  • 그 외의 조건일 경우, 괄호의 짝이 맞다는 것 이기 때문에 스택의 가장 위에 존재하는 항목을 제거한다.
  • isVPS가 참이고, 스택이 비어있다면 YES를 출력하고 그 이외의 경우는 NO를 출력한다.
profile
"계획에 따르기보다 변화에 대응하기를"

0개의 댓글