ALGORITHM

[JAVA] 백준 11899번- 괄호 끼워넣기

연듀 2022. 7. 20. 10:13

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

 

11899번: 괄호 끼워넣기

첫 번째 줄에 S를 올바른 괄호열으로 만들기 위해 앞과 뒤에 붙여야 할 괄호의 최소 개수를 출력합니다. 불가능한 경우는 주어지지 않습니다.

www.acmicpc.net

 

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();

        Stack<Character> stack = new Stack<>();
        int answer = 0;

        for (char x : str.toCharArray()) {
            if (x == ')') {
                if(!stack.isEmpty() && stack.peek() == '(') stack.pop();
                else stack.push(x);
            }
            else stack.push(x);

        }
        answer=stack.size();
        System.out.println(answer);
    }
}

 

닫는 괄호인 ' ) ' 일 경우, 스택이 비어있지 않고 마지막 스택의 원소가 열린 괄호인 ' ( ' 이면 그 ' ( ' 를 pop한다.

스택의 마지막 원소가 열린 괄호가 아니면  ' ) ' 를 push한다.

 

여는 괄호 ' ( ' 인 경우 그냥 push한다.

 

괄호 쌍을 만나면 스택에서 사라지고 짝이 안맞는 괄호들만이 스택에 남아있게 되므로 스택의 크기를 구하면 붙여야 할 괄호의 개수가 된다.