[백준] 10799번 쇠막대기 - Java

yseo14·2024년 11월 21일

코딩테스트 대비

목록 보기
33/88

문제링크

스택을 활용하는 대표적인 문제인 수식의 괄호쌍 문제로 약간의 응용이 필요한 문제이다.

풀이

레이저가 등장하는 순간 스택에 있는 여는괄호의 수가 생성되는 쇠막대기 조각 수를 의미한다.
1. 여는 괄호가 나오면 stack에 push 한다.
2. 닫는 괄호가 나오면 레이저인지 판단하기 위해 바로 직전의 괄호가 여는괄호인지 확인한다.
2-1. 레이저일 경우 스택의 여는괄호 한 개를 pop한 후, 스택에 존재하는 여는괄호의 개수를 count에 더한다.
2-2. 레이저가 아닐 경우 쇠막대기의 끝을 의미하므로(앞에서 레이저로 자르고 남은 쇠막대기의 끝부분을 의미) count에 1을 더하고 stack의 여는괄호 1개를 pop하여 지운다.

위 과정을 통해 count를 계산하면 총 쇠막대기 조각 수를 구할 수 있다.

코드

package BOJ;

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

public class sol10799 {
    static Stack<String> stack = new Stack<>();
    static int count = 0;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        String[] separated = str.split("");

        for (int i = 0; i < separated.length; i++) {
            String curr = separated[i];
            switch (curr) {
                case "(":
                    stack.push(curr);
                    break;
                case ")":
                    if (!stack.isEmpty() && separated[i - 1].equals("(")) { //  레이저
                        stack.pop();    //  레이저 앞부분 제거
                        count += stack.size();
                    } else {
                        stack.pop();
                        count++;
                    }
                    break;
            }
        }
        System.out.println(count);
    }
}
profile
like the water flowing

0개의 댓글