백준 알고리즘

13. 10799번 쇠막대기

Romenest 2021. 9. 13. 10:00

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
 
public class training {
    public static void main(String[] args) throws NumberFormatException, IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String string = bf.readLine();	
        Stack<Character> stack = new Stack<>();
 
        int bar = 0;
        for (int i = 0; i < string.length(); i++) {
            if (string.charAt(i) == '(') { 
            	// '(' 는 쇠막대기가 시작한다는것
                stack.push('('); //스택에 (를 넣는다, 즉 스택의 사이즈가 쇠막대기의 개수가 되겠다.
                continue;
            }
            else if (string.charAt(i) == ')') { // ')' 는 레이저가 되거나, 막대가 끝이나거나
                stack.pop(); // 일단 stack에서 pop을 실행.
 
                if (string.charAt(i - 1) == '(') { // 바로전이 '(' 였다면 레이저를 의미
                    bar += stack.size(); 
                    // 현재 stack의 사이즈만큼 더해 줌.
                    // 즉 현재 쇠막대기의 개수를 더해준다
                }
                else { // 바로전이 '(' 가 아니라 ')' 였다면 단순한 막대의 끝
                    bar++; // 1을 더해 줌.
                }
            }
        }
 
        bw.write(bar);
        bw.flush();
        br.close();
        bw.close();
    }
 
}

 

결과는