白駿-10799号(鉄棒)
質問元:https://www.acmicpc.net/problem/10799
質問する本以上の鉄棒をレーザーで切ります.効率的に動作するために、鉄棒を下から上へ重ね、上から垂直にレーザーを発射し、鉄棒を切断します.鉄棒とレーザーの配置は以下の条件を満たす: 鉄棒は自分より長い鉄棒にしか置けません.鉄棒を別の鉄棒の上に置くと、端点が重ならないように完全に含まれるように配置されます. 角鉄棒を切断する少なくとも1つのレーザ光が存在する. レーザは、いずれの鉄棒の両端にも重ならない. 以下の図は、上記の条件を満たす例を示す.水平に描かれた太い実線は鉄棒で、点はレーザーの位置で、垂直に描かれた破線の矢印はレーザーの発射方向です.
これらのレーザーと鉄棒の配置は、括弧で左から右に順に表すことができます. レーザは、左かっこと右かっこの隣接対「()」として表現される.また、すべての「()」はレーザー光を表す必要があります. 鉄棒の左端は左括弧"(",右端は右括弧")"で表される.
前例のカッコは図に表されます.
鉄棒はレーザで数枚に切断され、上記の例では、最上位の2本の鉄棒はそれぞれ3枚と2枚に切断され、このようにして与えられた鉄棒は全部で17枚に切断された.
鉄棒とレーザーの配置を表す括弧が与えられた場合、切断された鉄棒片の総数を求めるプログラムを作成してください.
スタックでロックを解除し、試行配列でロックを解除する方法で解決しました. を見つけるルールは、「(」が「前は」にナビゲートされている場合)、「前は」がパイプの開始を意味するため、パイプの数が増加します. ")"で""にナビゲートした場合、前は""であり、これはパイプが終了したことを意味するため、パイプを追加し、パイプ全体の数を減らす. 「」を探索する手順では、前面が「(」であればレーザーで切断する場合)であるため、現在のパイプの個数で追加する.
質問する
これらのレーザーと鉄棒の配置は、括弧で左から右に順に表すことができます.
前例のカッコは図に表されます.
鉄棒はレーザで数枚に切断され、上記の例では、最上位の2本の鉄棒はそれぞれ3枚と2枚に切断され、このようにして与えられた鉄棒は全部で17枚に切断された.
鉄棒とレーザーの配置を表す括弧が与えられた場合、切断された鉄棒片の総数を求めるプログラムを作成してください.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
char[] temp = reader.readLine().toCharArray();
int pipeCnt = 0;
int answer = 0;
for (int i = 1, size = temp.length; i < size; i++) {
if (temp[i] == '(') {
if (temp[i - 1] == '(') pipeCnt++; // 파이프의 시작
} else if (temp[i] == ')') {
if (temp[i - 1] == ')') { // 파이프의 끝
answer += 1;
pipeCnt--;
}
else answer += pipeCnt; // 레이저 컷
}
}
System.out.println(answer);
}
}
何とかしてReference
この問題について(白駿-10799号(鉄棒)), 我々は、より多くの情報をここで見つけました https://velog.io/@ghc1124/백준-10799번쇠막대기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol