괄호 - 백준 9012번

Yuno·2024년 6월 25일

Java)코테 연습

목록 보기
3/18

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

import java.util.Scanner;
import java.util.Stack;

class Main {
    public static boolean parenthesis(String s) {
        Stack<Character> stack= new Stack<>();
        boolean checkFlag = true;
        for (char c : s.toCharArray()) {
            if (c == '(') {
                stack.push(c);
            } else if (c == ')') {
                if (stack.isEmpty()) {
                    checkFlag = false;
                    break;
                } else {
                    stack.pop();
                }
            }
        }
        if (checkFlag && stack.isEmpty()) {
            return checkFlag;
        } else {
            return false;
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        sc.nextLine();
        for (int i = 0; i < T; i++) {
            String s = sc.nextLine();
            if (parenthesis(s)) {
                System.out.println("YES");
            } else {
                System.out.println("NO");
            }
        }
    }
}

문제풀이

접근방식

  1. Stack 자료구조를 사용해 후입선출(LIFO)의 형태를 이용
  2. 문자열을 순회하면서 각 문자를 확인
  3. ( 를 만나면 Stack에 삽입
  4. ) 를 만나면 Stack이 비어있는지 확인
    -Stack이 비어있다면 현재 )에 대응하는 ( 가 없으므로 false 반환
    -Stack이 비어있지 않다면 Stack에서 (를 pop.
  5. 문자열을 모두 순회한 후에도 스택에 (가 남아있다면 false 반환
profile
Hello World

0개의 댓글