基本アルゴリズム-鉄棒
1464 ワード
これはレーザーで棒を切る問題です.
()が現れると、無条件にレーザ光を表す.
直観的に考えてみれば、「(」は3つだと3本の鉄棒が重なっています.そして()が入力されると、前に積み上げた「(」の数でカットされます.
ex) ()(((()())(())()))(())ここ(3本の鉄棒が重なる): ()はすぐに出てきて、鉄棒の個数に+3を加えて、結果=6個になりました. の後、すなわち()レーザが現れ、結果=9個であった. 「」で閉鎖され、鉄棒の個数は2本. "(")、さらに鉄棒を1本加えて3本に増やします. レーザは透過し,+3は結果=12であった.ここでは例外があり、新しく鉄棒が現れたら2つに分けて+1が必要です. 上に交換するものがあります.初期欄の個数を増やし、最後に加算します.
Qでこの問題を解いてみましたが、2つのブロックが分かれている場合ではなく、スタックで解いてみました.実現から見ると、私はどうしてこれを解くことができなかったのかと思います.あまり難しく考えないで、直感的に答えなさい.
()が現れると、無条件にレーザ光を表す.
直観的に考えてみれば、「(」は3つだと3本の鉄棒が重なっています.そして()が入力されると、前に積み上げた「(」の数でカットされます.
ex) ()(((()())(())()))(())
Qでこの問題を解いてみましたが、2つのブロックが分かれている場合ではなく、スタックで解いてみました.実現から見ると、私はどうしてこれを解くことができなかったのかと思います.あまり難しく考えないで、直感的に答えなさい.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Hello_world {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
StringBuilder sb = new StringBuilder();
Stack<Character> stack = new Stack<>();
int result =0;
for(int i=0; i<str.length(); i++) {
if(str.charAt(i) == '(') {
stack.add('(');
}
if(str.charAt(i) == ')') {
stack.pop();
if(str.charAt(i-1) == '(') {
result += stack.size();
} else {
result++;
}
}
}
System.out.print(result);
}
}
Reference
この問題について(基本アルゴリズム-鉄棒), 我々は、より多くの情報をここで見つけました https://velog.io/@code_alpaca/기초-알고리즘-쇠막대기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol