[백준 | Java] 10799 쇠막대기

알린·2024년 1월 10일

baekjoon

목록 보기
6/68



내 풀이

()(((()())(())()))(())에서

  1. '('가 나온 후 ')'가 나오면 한 번 잘린 것이기 때문에 layer를 -1, result에 layer를 더하기
  2. '('이 나오면 layer를 +1
  3. ')'이 나온 후 ')'가 나오면 가장 상위층의 막대기가 끝나는 것이기 때문에 layer를 -1, result를 +1

다음 규칙을 적용하기 위해 stack을 이용해 layer는 stack.size()로 대체 사용해 따로 변수를 만들지 않는다.

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();
        Stack<Character> stack = new Stack<>();
        int result = 0;

        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '(') {
                stack.push('(');
            } else if (str.charAt(i) == ')' && str.charAt(i-1) == ')') {
                stack.pop();
                result++;
            } else {
                // '(' 이후에 바로 ')'가 들어왔을 때
                stack.pop();
                result += stack.size();
            }
        }
        System.out.println(result);
    }
}

profile
짱이 되고싶은 개발 기록

0개의 댓글