백준 - 10799번 쇠막대기

2024. 3. 15. 16:46코딩테스트 정리(자바)

728x90

전에 한번 풀어봤던 문제라 쉽게 풀릴 듯 안풀렸다.

핵심은 ')'가 나오면 -> 레이저 인지 막대의 끝인지 구분해서 다르게 계산해야 한다.

레이저라면 스택의 크기만큼 더하지만 

막대의 끝이라면 +1만 더해야 한다. 

 

import java.io.*;
import java.util.*;

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(
        new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(
        new OutputStreamWriter(System.out));
        
        Stack <Character> stack=new Stack<>();
        String s=br.readLine();
        int result=0;
        int size=s.length();
        
        for(int i=0;i<size;i++){
            char ch=s.charAt(i);
            if(ch==')'){
                stack.pop();
                if(s.charAt(i-1)=='(') //레이저였다면
                    result+=stack.size();
                else //막대의 끝이었다면
                    result++;  //+1만 함
            }
            else
                stack.push(ch);
        }
        bw.write(Integer.toString(result));
        bw.flush();
        bw.close();
    }
}
728x90