白駿10799鉄棒


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


トラブルシューティング


ポイントはレーザーか鉄棒かを区別することです.カッコが隣接している場合は()レーザー、そうでない場合は鉄棒です.レーザーの場合はスタックサイズを増やしたり、鉄棒の場合は1を増やしたりすることができます.スタックとして実装され、スタックを使用しなくてもカッコ問題のようにカウントして解くことができます.
  • 彫刻個数についての和変数宣言
  • 括弧を開放する「(もしそうであれば)スタックに追加
  • 括弧「)」の場合
  • 以前の値と比較して、「(」は「レーザ->スタックサイズ加算」
  • 前の値と比較して「)」は鉄棒->1プラス
  • ソースコード

    import java.util.Scanner;
    import java.util.Stack;
    
    public class b10799 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String input = sc.nextLine();
            Stack<Integer> stack = new Stack<>();
            int sum = 0; // 조각 개수
            for (int i = 0; i < input.length(); i++) {
                if (input.charAt(i) == '(') {
                    stack.push(i);
                } else { // 닫힌 괄호 )
                    if (input.charAt(i-1)=='(') { // 이전 문자가 ( 일 경우 레이저
                        stack.pop();
                        sum += stack.size();
                    } else { // 이전 문자가 ) 일 경우 쇠막대기
                        stack.pop();
                        sum += 1;
                    }
                }
            }
            System.out.println(sum);
        }
    }