본문 바로가기
알고리즘/스택

항해99 27일차 TIL( 괄호 / 백준)

by 순원이 2024. 4. 25.

99클럽 모의고사를 보고나서 나의 문제점을 발견했다. 문제를 보면 어떤 유형인지 파악하지 못한다는 것이다. 유형을 생각지도 않은 채 무작정 문제를 풀어 생긴 문제라 본다. 알고리즘 문제 별로 푸는 연습을 해야겠다. 오늘은 Stack 문제를 풀어볼 것이다.

 

문제         

 

9012번: 괄호

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

www.acmicpc.net

1 번째 시도   

  • 조건에 부합하면 스택에 넣고 차례차례 빼는 느낌의 문제면 Stack문제라 생각하기
import java.util.*;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.parseInt(br.readLine());

        for (int i = 0; i < T; i++) {
            String input = br.readLine();
            if (isValidParentheses(input))
                System.out.println("YES");
            else
                System.out.println("NO");
        }
    }

    private static boolean isValidParentheses(String s) {
        Stack<Character> stack = new Stack<>();

        for (char c : s.toCharArray()) {
            if (c == '(') {
                stack.push(c);
            } else if (c == ')') {
                if (stack.isEmpty()) {
                    return false;  
                }
                stack.pop(); 
            }
        }

        return stack.isEmpty();  
    }
}

  • 스택 구현체
    • new Stack<>();
  • String을 String 배열로 만들기 
    • String.split("")
  • char도 스택에 넣을 수 있다
    • Stack<Character>