[伯俊10799]鉄棒with Nodejs


📌 質問する


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

📌 に答える


かっこを見ると、스택だと思い、問題に触れました.論理は何もない.
1.最初にカッコが「(」の場合、スタックに追加します.
2.次に右括弧")が表示されると、2つのケースが表示されます.
1) 레이저가 되어 모든 막대기를 다 자르는 경우
	이럴 때에는 스택에 쌓은 '('의 개수 만큼 쇠막대기가 잘리기 때문에 스택의 길이만큼 쇠막대기 개수에 더해준다.

2) 막대기의 끝 부분이라 막대기 1개가 더 생기는 경우
	이 경우는 쇠막대기 개수에 +1을 더해주면 된다.

📌 コード#コード#

const fs = require("fs");
const stdin = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString().trim()
    : `(((()(()()))(())()))(()())`
).split("\n");

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

const brackets = input().split("");
const stack = [];
let stickCnt = 0;
for (let i = 0; i < brackets.length; i++) {
  if (brackets[i] === "(") {
    stack.push(brackets[i]);
  } else {
    stack.pop();
    if (brackets[i - 1] === "(") {
      stickCnt += stack.length;
    } else {
      stickCnt += 1;
    }
  }
}

console.log(stickCnt);

📌 に感銘を与える


初めて問題を見た時はスタックだったのに...スタックでしょうか…?どうやって解くの?と思います.
スタックを描き出して,")"が現れたときにどのように行われたのかを知ることで,解決策を考え出した.問題を解く時間は長くないが、考えるだけで1時間もかかった.もっと頑張ろう!
グラフィックフォーマットを除いて、他のアルゴリズムはすべて新しい、難しいので、私はもっとよく見て、熟知しなければならないと思います.毎日悟る...