[백준] 10799 쇠막대기

알파·2022년 6월 13일
0

Algorithm

목록 보기
10/20

자바에도 스택 클래스가 있으니 활용해서 풀 것
닫는 괄호를 만났을 때 인덱스 차이가 1일 경우에는 레이저에 더해주고 아닐 경우는 막대로 생각해주면 되는데..
다른 사람들이 훨씬 간단하게 풀어서 신기했다.
스택 사이즈만큼 답을 더해주고 나중에 막대가 끝날 때 1을 더해줘도 답이 나온다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        int[] stack = new int[100000];
        int[] laser = new int[100000];
        int size = 0;
        int laserSize = 0;
        int cnt = 0;
        for(int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c == '(') {
                stack[size] = i;
                size++;
            } else if(c == ')') {
                if(stack[size-1] == i-1){
                    laser[laserSize] = i-1;
                    laserSize++;
                } else {
                    for(int j = 0; j < laserSize; j++) {
                        if(laser[j] > stack[size-1] && laser[j] < i){
                            cnt++;
                        }
                    }
                    cnt++;
                }
                stack[size-1] = 0;
                size--;
            }
        }
        System.out.println(cnt);
    }
}
profile
I am what I repeatedly do

0개의 댓글