알고리즘

백준 10799번 쇠막대기 (JAVA)

박카스마시며코딩 2022. 3. 12. 22:13

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

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

 

저는 해당 문제를 스택 개념을 조금 활용하여 문제를 해결하였습니다.

저는 스택 대신 이전에 '('가 몇개 있었는지를 확인하였습니다.

그리고 ')'가 나온다면 (의 개수를 줄이고 결과값에 더해주었습니다.

하지만 바로 이전에 ')'가 나오고 ')'가 또 나온다면 이때는 막대기의 끝부분이기 때문에 결과값에 1만 늘렸습니다.

 

package BOJ.ETC;

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

public class BOJ_10799 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String command = br.readLine();
        int cnt = 0;
        int result = 0;
        char prev = '.';
        for(int i = 0 ; i < command.length() ; i++){
            char now = command.charAt(i);

            if(now == '('){
                cnt++;
            }else{
                cnt--;
                if(prev == ')'){
                    result++;
                }else{
                    result += cnt;
                }
            }
            prev = now;
        }
        System.out.println(result);
    }
}